...
可选的筛选文本可以设置为$ref,筛选regexp设置为^(refs/heads/develop | refs/heads/feature/+)$,以便仅为develop和feature分支触发生成。
触发特定的Job
在多个作业中使用该插件时,将具有相同的URL触发器所有作业。如果只想触发某个作业,则可以:
- 使用token参数可以为不同的作业使用不同的令牌。仅使用令牌意味着只有具有该确切令牌的作业才会对该请求可见。这将提高性能并减少每次调用的响应。
- 或者,添加一些请求参数(或Head,或post内容)并使用regexp筛选器仅在该参数具有特定值时触发。
Token参数
有一个特殊的token
标记参数。提供时,调用将仅触发具有该确切标记的作业。token
还允许在没有任何其他身份验证凭据的情况下调用。
...
The token can be supplied as a:
- Request parameter:
curl -vs http://localhost:8080/jenkins/generic-webhook-trigger/invoke?token=abc123 2>&1 |
---|
- Token header:
curl -vs -H "token: abc123" http://localhost:8080/jenkins/generic-webhook-trigger/invoke 2>&1 |
---|
- Authorization header of type Bearer :
|
---|
白名单
白名单可以在Jenkins全局配置页面中配置。白名单将阻止任何未在此列表中配置的对插件的请求。主机可以为空,以允许任何静态IP、CIDR或范围,规则可以如下:
|
---|
默认值
插件可以配置为默认值。如下所示:
但如果手动执行作业(或重播pipeline),则不会使用此默认值。因为插件根本不会被调用。您可以通过检查“this job is parametized”来解决这个问题,并添加一个与在插件中配置的参数同名的参数,如下所示:
...
现在,当您手动触发作业、重播pipeline以及使用插件触发作业时,都将使用此默认值!
解析JSON串
对JSON串的解析,当我们在获得指定的参数的时候,可以直接将赋值到一个参数表达未,对于JSON串中其它的值,可以通过“_”一步步的来进行获得,比如
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
{
"timestamp":1582523679788,
"webhookEvent":"jira:issue_updated",
"issue_event_type_name":"issue_generic",
"user":{
"self":"http://jira.jiracn.cn/rest/api/2/user?username=admin",
"name":"admin",
"key":"admin",
"emailAddress":"admin@hktxcn.com",
"avatarUrls":{
"48x48":"http://jira.jiracn.cn/secure/useravatar?avatarId=10352",
"24x24":"http://jira.jiracn.cn/secure/useravatar?size=small&avatarId=10352",
"16x16":"http://jira.jiracn.cn/secure/useravatar?size=xsmall&avatarId=10352",
"32x32":"http://jira.jiracn.cn/secure/useravatar?size=medium&avatarId=10352"
},
"displayName":"admin",
"active":true,
"timeZone":"Asia/Shanghai"
},
"issue":{
"id":"10019",
"self":"http://jira.jiracn.cn/rest/api/2/issue/10019",
"key":"DEMO-20",
"fields":{
"issuetype":{
"self":"http://jira.jiracn.cn/rest/api/2/issuetype/10001",
"id":"10001",
"description":"创建的 JIRA 敏捷-请勿编辑或删除。问题类型的用户故事。",
"iconUrl":"http://jira.jiracn.cn/images/icons/issuetypes/story.svg",
"name":"故事",
"subtask":false
},
"timespent":null,
"project":{
"self":"http://jira.jiracn.cn/rest/api/2/project/10000",
"id":"10000",
"key":"DEMO",
"name":"DEMO",
"avatarUrls":{
"48x48":"http://jira.jiracn.cn/secure/projectavatar?avatarId=10324",
"24x24":"http://jira.jiracn.cn/secure/projectavatar?size=small&avatarId=10324",
"16x16":"http://jira.jiracn.cn/secure/projectavatar?size=xsmall&avatarId=10324",
"32x32":"http://jira.jiracn.cn/secure/projectavatar?size=medium&avatarId=10324"
}
},
"fixVersions":[
{
"self":"http://jira.jiracn.cn/rest/api/2/version/10000",
"id":"10000",
"name":"Version 1.0",
"archived":false,
"released":true,
"releaseDate":"2020-02-23"
}
],
"customfield_10110":null,
"customfield_10111":null,
"aggregatetimespent":null,
"resolution":null,
"customfield_10112":null,
"customfield_10113":null,
"customfield_10114":null,
"customfield_10104":null,
"customfield_10105":null,
"customfield_10106":null,
"customfield_10107":null,
"customfield_10108":null,
"customfield_10109":null,
"resolutiondate":null,
"workratio":-1,
"lastViewed":"2020-02-24T13:54:39.730+0800",
"watches":{
"self":"http://jira.jiracn.cn/rest/api/2/issue/DEMO-20/watchers",
"watchCount":1,
"isWatching":true
},
"created":"2020-01-30T00:49:05.010+0800",
"priority":{
"self":"http://jira.jiracn.cn/rest/api/2/priority/3",
"iconUrl":"http://jira.jiracn.cn/images/icons/priorities/medium.svg",
"name":"Medium",
"id":"3"
},
"customfield_10100":null,
"customfield_10101":null,
"customfield_10102":null,
"labels":[
],
"customfield_10103":[
],
"timeestimate":null,
"aggregatetimeoriginalestimate":null,
"versions":[
],
"issuelinks":[
],
"assignee":{
"self":"http://jira.jiracn.cn/rest/api/2/user?username=admin",
"name":"admin",
"key":"admin",
"emailAddress":"admin@hktxcn.com",
"avatarUrls":{
"48x48":"http://jira.jiracn.cn/secure/useravatar?avatarId=10352",
"24x24":"http://jira.jiracn.cn/secure/useravatar?size=small&avatarId=10352",
"16x16":"http://jira.jiracn.cn/secure/useravatar?size=xsmall&avatarId=10352",
"32x32":"http://jira.jiracn.cn/secure/useravatar?size=medium&avatarId=10352"
},
"displayName":"admin",
"active":true,
"timeZone":"Asia/Shanghai"
},
"updated":"2020-02-24T13:54:39.786+0800",
"status":{
"self":"http://jira.jiracn.cn/rest/api/2/status/10000",
"description":"",
"iconUrl":"http://jira.jiracn.cn/",
"name":"待办",
"id":"10000",
"statusCategory":{
"self":"http://jira.jiracn.cn/rest/api/2/statuscategory/2",
"id":2,
"key":"new",
"colorName":"blue-gray",
"name":"待办"
}
},
"components":[
],
"timeoriginalestimate":null,
"description":null,
"timetracking":{
},
"customfield_10126":null,
"customfield_10005":"0|i00047:",
"customfield_10006":3,
"customfield_10127":null,
"customfield_10128":null,
"attachment":[
],
"aggregatetimeestimate":null,
"summary":"As a user, I'd like a historical story to show in reports",
"creator":{
"self":"http://jira.jiracn.cn/rest/api/2/user?username=admin",
"name":"admin",
"key":"admin",
"emailAddress":"admin@hktxcn.com",
"avatarUrls":{
"48x48":"http://jira.jiracn.cn/secure/useravatar?avatarId=10352",
"24x24":"http://jira.jiracn.cn/secure/useravatar?size=small&avatarId=10352",
"16x16":"http://jira.jiracn.cn/secure/useravatar?size=xsmall&avatarId=10352",
"32x32":"http://jira.jiracn.cn/secure/useravatar?size=medium&avatarId=10352"
},
"displayName":"admin",
"active":true,
"timeZone":"Asia/Shanghai"
},
"subtasks":[
],
"reporter":{
"self":"http://jira.jiracn.cn/rest/api/2/user?username=admin",
"name":"admin",
"key":"admin",
"emailAddress":"admin@hktxcn.com",
"avatarUrls":{
"48x48":"http://jira.jiracn.cn/secure/useravatar?avatarId=10352",
"24x24":"http://jira.jiracn.cn/secure/useravatar?size=small&avatarId=10352",
"16x16":"http://jira.jiracn.cn/secure/useravatar?size=xsmall&avatarId=10352",
"32x32":"http://jira.jiracn.cn/secure/useravatar?size=medium&avatarId=10352"
},
"displayName":"admin",
"active":true,
"timeZone":"Asia/Shanghai"
},
"customfield_10120":null,
"customfield_10000":null,
"customfield_10121":null,
"aggregateprogress":{
"progress":0,
"total":0
},
"customfield_10122":null,
"customfield_10123":null,
"customfield_10124":null,
"customfield_10125":null,
"customfield_10004":[
"com.atlassian.greenhopper.service.sprint.Sprint@6e14d364[id=2,rapidViewId=1,state=CLOSED,name=Sample Sprint 1,startDate=2020-01-30T00:49:08.253+08:00,endDate=2020-02-13T00:49:08.253+08:00,completeDate=2020-02-12T23:29:08.253+08:00,sequence=2,goal=<null>]"
],
"customfield_10115":null,
"customfield_10116":null,
"environment":null,
"customfield_10117":null,
"customfield_10118":null,
"customfield_10119":null,
"duedate":null,
"progress":{
"progress":0,
"total":0
},
"comment":{
"comments":[
{
"self":"http://jira.jiracn.cn/rest/api/2/issue/10019/comment/10015",
"id":"10015",
"author":{
"self":"http://jira.jiracn.cn/rest/api/2/user?username=admin",
"name":"admin",
"key":"admin",
"emailAddress":"admin@hktxcn.com",
"avatarUrls":{
"48x48":"http://jira.jiracn.cn/secure/useravatar?avatarId=10352",
"24x24":"http://jira.jiracn.cn/secure/useravatar?size=small&avatarId=10352",
"16x16":"http://jira.jiracn.cn/secure/useravatar?size=xsmall&avatarId=10352",
"32x32":"http://jira.jiracn.cn/secure/useravatar?size=medium&avatarId=10352"
},
"displayName":"admin",
"active":true,
"timeZone":"Asia/Shanghai"
},
"body":"Joined Sample Sprint 1 21 days 10 hours 20 minutes ago
To Do to Done 16 days 1 hours 21 minutes ago",
"updateAuthor":{
"self":"http://jira.jiracn.cn/rest/api/2/user?username=admin",
"name":"admin",
"key":"admin",
"emailAddress":"admin@hktxcn.com",
"avatarUrls":{
"48x48":"http://jira.jiracn.cn/secure/useravatar?avatarId=10352",
"24x24":"http://jira.jiracn.cn/secure/useravatar?size=small&avatarId=10352",
"16x16":"http://jira.jiracn.cn/secure/useravatar?size=xsmall&avatarId=10352",
"32x32":"http://jira.jiracn.cn/secure/useravatar?size=medium&avatarId=10352"
},
"displayName":"admin",
"active":true,
"timeZone":"Asia/Shanghai"
},
"created":"2020-02-04T09:48:05.010+0800",
"updated":"2020-02-04T09:48:05.010+0800"
},
{
"self":"http://jira.jiracn.cn/rest/api/2/issue/10019/comment/10101",
"id":"10101",
"author":{
"self":"http://jira.jiracn.cn/rest/api/2/user?username=admin",
"name":"admin",
"key":"admin",
"emailAddress":"admin@hktxcn.com",
"avatarUrls":{
"48x48":"http://jira.jiracn.cn/secure/useravatar?avatarId=10352",
"24x24":"http://jira.jiracn.cn/secure/useravatar?size=small&avatarId=10352",
"16x16":"http://jira.jiracn.cn/secure/useravatar?size=xsmall&avatarId=10352",
"32x32":"http://jira.jiracn.cn/secure/useravatar?size=medium&avatarId=10352"
},
"displayName":"admin",
"active":true,
"timeZone":"Asia/Shanghai"
},
"body":"SUCCESS: Integrated in !http://jenkins.jiracn.cn/images/16x16/blue.png! [wxj #17|http://jenkins.jiracn.cn/job/wxj/17/]
DEMO-20 add aa.html (admin: rev ce2692f9590b72514fb9269e5cddbea102f323a1)
* (delete) src/main/webapp/css/hktxcn2.css
",
"updateAuthor":{
"self":"http://jira.jiracn.cn/rest/api/2/user?username=admin",
"name":"admin",
"key":"admin",
"emailAddress":"admin@hktxcn.com",
"avatarUrls":{
"48x48":"http://jira.jiracn.cn/secure/useravatar?avatarId=10352",
"24x24":"http://jira.jiracn.cn/secure/useravatar?size=small&avatarId=10352",
"16x16":"http://jira.jiracn.cn/secure/useravatar?size=xsmall&avatarId=10352",
"32x32":"http://jira.jiracn.cn/secure/useravatar?size=medium&avatarId=10352"
},
"displayName":"admin",
"active":true,
"timeZone":"Asia/Shanghai"
},
"created":"2020-02-23T18:50:42.770+0800",
"updated":"2020-02-23T18:50:42.770+0800"
},
{
"self":"http://jira.jiracn.cn/rest/api/2/issue/10019/comment/10102",
"id":"10102",
"author":{
"self":"http://jira.jiracn.cn/rest/api/2/user?username=admin",
"name":"admin",
"key":"admin",
"emailAddress":"admin@hktxcn.com",
"avatarUrls":{
"48x48":"http://jira.jiracn.cn/secure/useravatar?avatarId=10352",
"24x24":"http://jira.jiracn.cn/secure/useravatar?size=small&avatarId=10352",
"16x16":"http://jira.jiracn.cn/secure/useravatar?size=xsmall&avatarId=10352",
"32x32":"http://jira.jiracn.cn/secure/useravatar?size=medium&avatarId=10352"
},
"displayName":"admin",
"active":true,
"timeZone":"Asia/Shanghai"
},
"body":"SUCCESS: Integrated in !http://jenkins.jiracn.cn/images/16x16/blue.png! [wxj #19|http://jenkins.jiracn.cn/job/wxj/19/]
DEMO-20 add aa.html (admin: rev 8cfed0cec382606ef4f103d27d3003d08561e4bd)
* (add) src/main/webapp/css/hktxcn2.css
DEMO-20 add aa.html (admin: rev a2fc375e5bbb4a936cd3dee3b2e81e3fa45a7231)
* (delete) src/main/webapp/css/normalize.css
",
"updateAuthor":{
"self":"http://jira.jiracn.cn/rest/api/2/user?username=admin",
"name":"admin",
"key":"admin",
"emailAddress":"admin@hktxcn.com",
"avatarUrls":{
"48x48":"http://jira.jiracn.cn/secure/useravatar?avatarId=10352",
"24x24":"http://jira.jiracn.cn/secure/useravatar?size=small&avatarId=10352",
"16x16":"http://jira.jiracn.cn/secure/useravatar?size=xsmall&avatarId=10352",
"32x32":"http://jira.jiracn.cn/secure/useravatar?size=medium&avatarId=10352"
},
"displayName":"admin",
"active":true,
"timeZone":"Asia/Shanghai"
},
"created":"2020-02-23T18:54:53.346+0800",
"updated":"2020-02-23T18:54:53.346+0800"
}
],
"maxResults":3,
"total":3,
"startAt":0
},
"votes":{
"self":"http://jira.jiracn.cn/rest/api/2/issue/DEMO-20/votes",
"votes":0,
"hasVoted":false
},
"worklog":{
"startAt":0,
"maxResults":20,
"total":0,
"worklogs":[
]
}
}
},
"changelog":{
"id":"10227",
"items":[
{
"field":"status",
"fieldtype":"jira",
"from":"10000",
"fromString":"To Do",
"to":"10000",
"toString":"To Do"
}
]
}
} |
可以获得以下变量并得到其值
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
webhookEvent_changelog_id = 10227
webhookEvent_changelog_items_0_field = status
webhookEvent_changelog_items_0_fieldtype = jira
webhookEvent_changelog_items_0_from = 10000
webhookEvent_changelog_items_0_fromString = To Do
webhookEvent_changelog_items_0_to = 10000
webhookEvent_changelog_items_0_toString = To Do
webhookEvent_issue_event_type_name = issue_generic
webhookEvent_issue_fields_aggregateprogress_progress = 0
webhookEvent_issue_fields_aggregateprogress_total = 0
webhookEvent_issue_fields_assignee_active = true
webhookEvent_issue_fields_assignee_avatarUrls_16x16 = http://jira.jiracn.cn/secure/useravatar?size=xsmall&avatarId=10352
webhookEvent_issue_fields_assignee_avatarUrls_24x24 = http://jira.jiracn.cn/secure/useravatar?size=small&avatarId=10352
webhookEvent_issue_fields_assignee_avatarUrls_32x32 = http://jira.jiracn.cn/secure/useravatar?size=medium&avatarId=10352
webhookEvent_issue_fields_assignee_avatarUrls_48x48 = http://jira.jiracn.cn/secure/useravatar?avatarId=10352
webhookEvent_issue_fields_assignee_displayName = admin
webhookEvent_issue_fields_assignee_emailAddress = admin@hktxcn.com
webhookEvent_issue_fields_assignee_key = admin
webhookEvent_issue_fields_assignee_name = admin
webhookEvent_issue_fields_assignee_self = http://jira.jiracn.cn/rest/api/2/user?username=admin
webhookEvent_issue_fields_assignee_timeZone = Asia/Shanghai
webhookEvent_issue_fields_comment_comments_0_author_active = true
webhookEvent_issue_fields_comment_comments_0_author_avatarUrls_16x16 = http://jira.jiracn.cn/secure/useravatar?size=xsmall&avatarId=10352
webhookEvent_issue_fields_comment_comments_0_author_avatarUrls_24x24 = http://jira.jiracn.cn/secure/useravatar?size=small&avatarId=10352
webhookEvent_issue_fields_comment_comments_0_author_avatarUrls_32x32 = http://jira.jiracn.cn/secure/useravatar?size=medium&avatarId=10352
webhookEvent_issue_fields_comment_comments_0_author_avatarUrls_48x48 = http://jira.jiracn.cn/secure/useravatar?avatarId=10352
webhookEvent_issue_fields_comment_comments_0_author_displayName = admin
webhookEvent_issue_fields_comment_comments_0_author_emailAddress = admin@hktxcn.com
webhookEvent_issue_fields_comment_comments_0_author_key = admin
webhookEvent_issue_fields_comment_comments_0_author_name = admin
webhookEvent_issue_fields_comment_comments_0_author_self = http://jira.jiracn.cn/rest/api/2/user?username=admin
webhookEvent_issue_fields_comment_comments_0_author_timeZone = Asia/Shanghai
webhookEvent_issue_fields_comment_comments_0_body = Joined Sample Sprint 1 21 days 10 hours 20 minutes ago
To Do to Done 16 days 1 hours 21 minutes ago
webhookEvent_issue_fields_comment_comments_0_created = 2020-02-04T09:48:05.010+0800
webhookEvent_issue_fields_comment_comments_0_id = 10015
webhookEvent_issue_fields_comment_comments_0_self = http://jira.jiracn.cn/rest/api/2/issue/10019/comment/10015
webhookEvent_issue_fields_comment_comments_0_updateAuthor_active = true
webhookEvent_issue_fields_comment_comments_0_updateAuthor_avatarUrls_16x16 = http://jira.jiracn.cn/secure/useravatar?size=xsmall&avatarId=10352
webhookEvent_issue_fields_comment_comments_0_updateAuthor_avatarUrls_24x24 = http://jira.jiracn.cn/secure/useravatar?size=small&avatarId=10352
webhookEvent_issue_fields_comment_comments_0_updateAuthor_avatarUrls_32x32 = http://jira.jiracn.cn/secure/useravatar?size=medium&avatarId=10352
webhookEvent_issue_fields_comment_comments_0_updateAuthor_avatarUrls_48x48 = http://jira.jiracn.cn/secure/useravatar?avatarId=10352
webhookEvent_issue_fields_comment_comments_0_updateAuthor_displayName = admin
webhookEvent_issue_fields_comment_comments_0_updateAuthor_emailAddress = admin@hktxcn.com
webhookEvent_issue_fields_comment_comments_0_updateAuthor_key = admin
webhookEvent_issue_fields_comment_comments_0_updateAuthor_name = admin
webhookEvent_issue_fields_comment_comments_0_updateAuthor_self = http://jira.jiracn.cn/rest/api/2/user?username=admin
webhookEvent_issue_fields_comment_comments_0_updateAuthor_timeZone = Asia/Shanghai
webhookEvent_issue_fields_comment_comments_0_updated = 2020-02-04T09:48:05.010+0800
webhookEvent_issue_fields_comment_comments_1_author_active = true
webhookEvent_issue_fields_comment_comments_1_author_avatarUrls_16x16 = http://jira.jiracn.cn/secure/useravatar?size=xsmall&avatarId=10352
webhookEvent_issue_fields_comment_comments_1_author_avatarUrls_24x24 = http://jira.jiracn.cn/secure/useravatar?size=small&avatarId=10352
webhookEvent_issue_fields_comment_comments_1_author_avatarUrls_32x32 = http://jira.jiracn.cn/secure/useravatar?size=medium&avatarId=10352
webhookEvent_issue_fields_comment_comments_1_author_avatarUrls_48x48 = http://jira.jiracn.cn/secure/useravatar?avatarId=10352
webhookEvent_issue_fields_comment_comments_1_author_displayName = admin
webhookEvent_issue_fields_comment_comments_1_author_emailAddress = admin@hktxcn.com
webhookEvent_issue_fields_comment_comments_1_author_key = admin
webhookEvent_issue_fields_comment_comments_1_author_name = admin
webhookEvent_issue_fields_comment_comments_1_author_self = http://jira.jiracn.cn/rest/api/2/user?username=admin
webhookEvent_issue_fields_comment_comments_1_author_timeZone = Asia/Shanghai
webhookEvent_issue_fields_comment_comments_1_body = SUCCESS: Integrated in !http://jenkins.jiracn.cn/images/16x16/blue.png! [wxj #17|http://jenkins.jiracn.cn/job/wxj/17/]
DEMO-20 add aa.html (admin: rev ce2692f9590b72514fb9269e5cddbea102f323a1)
* (delete) src/main/webapp/css/hktxcn2.css
webhookEvent_issue_fields_comment_comments_1_created = 2020-02-23T18:50:42.770+0800
webhookEvent_issue_fields_comment_comments_1_id = 10101
webhookEvent_issue_fields_comment_comments_1_self = http://jira.jiracn.cn/rest/api/2/issue/10019/comment/10101
webhookEvent_issue_fields_comment_comments_1_updateAuthor_active = true
webhookEvent_issue_fields_comment_comments_1_updateAuthor_avatarUrls_16x16 = http://jira.jiracn.cn/secure/useravatar?size=xsmall&avatarId=10352
webhookEvent_issue_fields_comment_comments_1_updateAuthor_avatarUrls_24x24 = http://jira.jiracn.cn/secure/useravatar?size=small&avatarId=10352
webhookEvent_issue_fields_comment_comments_1_updateAuthor_avatarUrls_32x32 = http://jira.jiracn.cn/secure/useravatar?size=medium&avatarId=10352
webhookEvent_issue_fields_comment_comments_1_updateAuthor_avatarUrls_48x48 = http://jira.jiracn.cn/secure/useravatar?avatarId=10352
webhookEvent_issue_fields_comment_comments_1_updateAuthor_displayName = admin
webhookEvent_issue_fields_comment_comments_1_updateAuthor_emailAddress = admin@hktxcn.com
webhookEvent_issue_fields_comment_comments_1_updateAuthor_key = admin
webhookEvent_issue_fields_comment_comments_1_updateAuthor_name = admin
webhookEvent_issue_fields_comment_comments_1_updateAuthor_self = http://jira.jiracn.cn/rest/api/2/user?username=admin
webhookEvent_issue_fields_comment_comments_1_updateAuthor_timeZone = Asia/Shanghai
webhookEvent_issue_fields_comment_comments_1_updated = 2020-02-23T18:50:42.770+0800
webhookEvent_issue_fields_comment_comments_2_author_active = true
webhookEvent_issue_fields_comment_comments_2_author_avatarUrls_16x16 = http://jira.jiracn.cn/secure/useravatar?size=xsmall&avatarId=10352
webhookEvent_issue_fields_comment_comments_2_author_avatarUrls_24x24 = http://jira.jiracn.cn/secure/useravatar?size=small&avatarId=10352
webhookEvent_issue_fields_comment_comments_2_author_avatarUrls_32x32 = http://jira.jiracn.cn/secure/useravatar?size=medium&avatarId=10352
webhookEvent_issue_fields_comment_comments_2_author_avatarUrls_48x48 = http://jira.jiracn.cn/secure/useravatar?avatarId=10352
webhookEvent_issue_fields_comment_comments_2_author_displayName = admin
webhookEvent_issue_fields_comment_comments_2_author_emailAddress = admin@hktxcn.com
webhookEvent_issue_fields_comment_comments_2_author_key = admin
webhookEvent_issue_fields_comment_comments_2_author_name = admin
webhookEvent_issue_fields_comment_comments_2_author_self = http://jira.jiracn.cn/rest/api/2/user?username=admin
webhookEvent_issue_fields_comment_comments_2_author_timeZone = Asia/Shanghai
webhookEvent_issue_fields_comment_comments_2_body = SUCCESS: Integrated in !http://jenkins.jiracn.cn/images/16x16/blue.png! [wxj #19|http://jenkins.jiracn.cn/job/wxj/19/]
DEMO-20 add aa.html (admin: rev 8cfed0cec382606ef4f103d27d3003d08561e4bd)
* (add) src/main/webapp/css/hktxcn2.css
DEMO-20 add aa.html (admin: rev a2fc375e5bbb4a936cd3dee3b2e81e3fa45a7231)
* (delete) src/main/webapp/css/normalize.css
webhookEvent_issue_fields_comment_comments_2_created = 2020-02-23T18:54:53.346+0800
webhookEvent_issue_fields_comment_comments_2_id = 10102
webhookEvent_issue_fields_comment_comments_2_self = http://jira.jiracn.cn/rest/api/2/issue/10019/comment/10102
webhookEvent_issue_fields_comment_comments_2_updateAuthor_active = true
webhookEvent_issue_fields_comment_comments_2_updateAuthor_avatarUrls_16x16 = http://jira.jiracn.cn/secure/useravatar?size=xsmall&avatarId=10352
webhookEvent_issue_fields_comment_comments_2_updateAuthor_avatarUrls_24x24 = http://jira.jiracn.cn/secure/useravatar?size=small&avatarId=10352
webhookEvent_issue_fields_comment_comments_2_updateAuthor_avatarUrls_32x32 = http://jira.jiracn.cn/secure/useravatar?size=medium&avatarId=10352
webhookEvent_issue_fields_comment_comments_2_updateAuthor_avatarUrls_48x48 = http://jira.jiracn.cn/secure/useravatar?avatarId=10352
webhookEvent_issue_fields_comment_comments_2_updateAuthor_displayName = admin
webhookEvent_issue_fields_comment_comments_2_updateAuthor_emailAddress = admin@hktxcn.com
webhookEvent_issue_fields_comment_comments_2_updateAuthor_key = admin
webhookEvent_issue_fields_comment_comments_2_updateAuthor_name = admin
webhookEvent_issue_fields_comment_comments_2_updateAuthor_self = http://jira.jiracn.cn/rest/api/2/user?username=admin
webhookEvent_issue_fields_comment_comments_2_updateAuthor_timeZone = Asia/Shanghai
webhookEvent_issue_fields_comment_comments_2_updated = 2020-02-23T18:54:53.346+0800
webhookEvent_issue_fields_comment_maxResults = 3
webhookEvent_issue_fields_comment_startAt = 0
webhookEvent_issue_fields_comment_total = 3
webhookEvent_issue_fields_created = 2020-01-30T00:49:05.010+0800
webhookEvent_issue_fields_creator_active = true
webhookEvent_issue_fields_creator_avatarUrls_16x16 = http://jira.jiracn.cn/secure/useravatar?size=xsmall&avatarId=10352
webhookEvent_issue_fields_creator_avatarUrls_24x24 = http://jira.jiracn.cn/secure/useravatar?size=small&avatarId=10352
webhookEvent_issue_fields_creator_avatarUrls_32x32 = http://jira.jiracn.cn/secure/useravatar?size=medium&avatarId=10352
webhookEvent_issue_fields_creator_avatarUrls_48x48 = http://jira.jiracn.cn/secure/useravatar?avatarId=10352
webhookEvent_issue_fields_creator_displayName = admin
webhookEvent_issue_fields_creator_emailAddress = admin@hktxcn.com
webhookEvent_issue_fields_creator_key = admin
webhookEvent_issue_fields_creator_name = admin
webhookEvent_issue_fields_creator_self = http://jira.jiracn.cn/rest/api/2/user?username=admin
webhookEvent_issue_fields_creator_timeZone = Asia/Shanghai
webhookEvent_issue_fields_customfield_10004_0 = com.atlassian.greenhopper.service.sprint.Sprint@6e14d364[id=2,rapidViewId=1,state=CLOSED,name=Sample Sprint 1,startDate=2020-01-30T00:49:08.253+08:00,endDate=2020-02-13T00:49:08.253+08:00,completeDate=2020-02-12T23:29:08.253+08:00,sequence=2,goal=<null>]
webhookEvent_issue_fields_customfield_10005 = 0|i00047:
webhookEvent_issue_fields_customfield_10006 = 3.0
webhookEvent_issue_fields_fixVersions_0_archived = false
webhookEvent_issue_fields_fixVersions_0_id = 10000
webhookEvent_issue_fields_fixVersions_0_name = Version 1.0
webhookEvent_issue_fields_fixVersions_0_releaseDate = 2020-02-23
webhookEvent_issue_fields_fixVersions_0_released = true
webhookEvent_issue_fields_fixVersions_0_self = http://jira.jiracn.cn/rest/api/2/version/10000
webhookEvent_issue_fields_issuetype_description = 创建的 JIRA 敏捷-请勿编辑或删除。问题类型的用户故事。
webhookEvent_issue_fields_issuetype_iconUrl = http://jira.jiracn.cn/images/icons/issuetypes/story.svg
webhookEvent_issue_fields_issuetype_id = 10001
webhookEvent_issue_fields_issuetype_name = 故事
webhookEvent_issue_fields_issuetype_self = http://jira.jiracn.cn/rest/api/2/issuetype/10001
webhookEvent_issue_fields_issuetype_subtask = false
webhookEvent_issue_fields_lastViewed = 2020-02-24T13:54:39.730+0800
webhookEvent_issue_fields_priority_iconUrl = http://jira.jiracn.cn/images/icons/priorities/medium.svg
webhookEvent_issue_fields_priority_id = 3
webhookEvent_issue_fields_priority_name = Medium
webhookEvent_issue_fields_priority_self = http://jira.jiracn.cn/rest/api/2/priority/3
webhookEvent_issue_fields_progress_progress = 0
webhookEvent_issue_fields_progress_total = 0
webhookEvent_issue_fields_project_avatarUrls_16x16 = http://jira.jiracn.cn/secure/projectavatar?size=xsmall&avatarId=10324
webhookEvent_issue_fields_project_avatarUrls_24x24 = http://jira.jiracn.cn/secure/projectavatar?size=small&avatarId=10324
webhookEvent_issue_fields_project_avatarUrls_32x32 = http://jira.jiracn.cn/secure/projectavatar?size=medium&avatarId=10324
webhookEvent_issue_fields_project_avatarUrls_48x48 = http://jira.jiracn.cn/secure/projectavatar?avatarId=10324
webhookEvent_issue_fields_project_id = 10000
webhookEvent_issue_fields_project_key = DEMO
webhookEvent_issue_fields_project_name = DEMO
webhookEvent_issue_fields_project_self = http://jira.jiracn.cn/rest/api/2/project/10000
webhookEvent_issue_fields_reporter_active = true
webhookEvent_issue_fields_reporter_avatarUrls_16x16 = http://jira.jiracn.cn/secure/useravatar?size=xsmall&avatarId=10352
webhookEvent_issue_fields_reporter_avatarUrls_24x24 = http://jira.jiracn.cn/secure/useravatar?size=small&avatarId=10352
webhookEvent_issue_fields_reporter_avatarUrls_32x32 = http://jira.jiracn.cn/secure/useravatar?size=medium&avatarId=10352
webhookEvent_issue_fields_reporter_avatarUrls_48x48 = http://jira.jiracn.cn/secure/useravatar?avatarId=10352
webhookEvent_issue_fields_reporter_displayName = admin
webhookEvent_issue_fields_reporter_emailAddress = admin@hktxcn.com
webhookEvent_issue_fields_reporter_key = admin
webhookEvent_issue_fields_reporter_name = admin
webhookEvent_issue_fields_reporter_self = http://jira.jiracn.cn/rest/api/2/user?username=admin
webhookEvent_issue_fields_reporter_timeZone = Asia/Shanghai
webhookEvent_issue_fields_status_description =
webhookEvent_issue_fields_status_iconUrl = http://jira.jiracn.cn/
webhookEvent_issue_fields_status_id = 10000
webhookEvent_issue_fields_status_name = 待办
webhookEvent_issue_fields_status_self = http://jira.jiracn.cn/rest/api/2/status/10000
webhookEvent_issue_fields_status_statusCategory_colorName = blue-gray
webhookEvent_issue_fields_status_statusCategory_id = 2
webhookEvent_issue_fields_status_statusCategory_key = new
webhookEvent_issue_fields_status_statusCategory_name = 待办
webhookEvent_issue_fields_status_statusCategory_self = http://jira.jiracn.cn/rest/api/2/statuscategory/2
webhookEvent_issue_fields_summary = As a user, I'd like a historical story to show in reports
webhookEvent_issue_fields_updated = 2020-02-24T13:54:39.786+0800
webhookEvent_issue_fields_votes_hasVoted = false
webhookEvent_issue_fields_votes_self = http://jira.jiracn.cn/rest/api/2/issue/DEMO-20/votes
webhookEvent_issue_fields_votes_votes = 0
webhookEvent_issue_fields_watches_isWatching = true
webhookEvent_issue_fields_watches_self = http://jira.jiracn.cn/rest/api/2/issue/DEMO-20/watchers
webhookEvent_issue_fields_watches_watchCount = 1
webhookEvent_issue_fields_worklog_maxResults = 20
webhookEvent_issue_fields_worklog_startAt = 0
webhookEvent_issue_fields_worklog_total = 0
webhookEvent_issue_fields_workratio = -1
webhookEvent_issue_id = 10019
webhookEvent_issue_key = DEMO-20
webhookEvent_issue_self = http://jira.jiracn.cn/rest/api/2/issue/10019
webhookEvent_timestamp = 1582523679788
webhookEvent_user_active = true
webhookEvent_user_avatarUrls_16x16 = http://jira.jiracn.cn/secure/useravatar?size=xsmall&avatarId=10352
webhookEvent_user_avatarUrls_24x24 = http://jira.jiracn.cn/secure/useravatar?size=small&avatarId=10352
webhookEvent_user_avatarUrls_32x32 = http://jira.jiracn.cn/secure/useravatar?size=medium&avatarId=10352
webhookEvent_user_avatarUrls_48x48 = http://jira.jiracn.cn/secure/useravatar?avatarId=10352
webhookEvent_user_displayName = admin
webhookEvent_user_emailAddress = admin@hktxcn.com
webhookEvent_user_key = admin
webhookEvent_user_name = admin
webhookEvent_user_self = http://jira.jiracn.cn/rest/api/2/user?username=admin
webhookEvent_user_timeZone = Asia/Shanghai
webhookEvent_webhookEvent = jira:issue_updated |
预构建步骤
如果需要在预构建步骤(如git clone)中解析值,则需要添加与变量同名的参数。
Pipeline
插件安装后在pipeline也可以使用GenericTrigger指令完成相同的配置。
现在,我们创建一个普通的pipeline项目。代码如下
Code Block | ||||
---|---|---|---|---|
| ||||
#!groovy
pipeline {
agent {
node {
label 'master'
}
}
triggers {
GenericTrigger(
genericVariables: [
[key: 'ref', value: '$. ref']
],
token: 'secret' ,
causeString: ' Triggered on $ref' ,
printContributedVariables: true,
printPostContent: true
)
}
stages {
stage('GWT env') {
steps {
sh "echo $ref"
sh "printenv"
}
}
}
} |
注意:在创建完成后,需要手动执行一次, 这样pipeline的触发条件オ会生效。
然后我们用postman 发起一次 HTTP POST 请求。
GenericTrigger 触发条件由GWT插件提供。此触发条件可以说是GWT的所有内容。
GenericTrigger 触发条件分为5部分,这样更易于理解各参数的作用
- 从 HTTP POST 请求中提取参数值。
- token, GWT 插件用于标识Jenkins项目的唯一性。
- 根据清求参数值判断是否触发Jenkins项目的抗行。
- 日志打印控制。
- Webhook 响应控制。
一个 HTTP POST 请求可以从三个维度提取参数,即 POST Body、URL参数和header。
GWT 插件提供了三个参数分别从这三个维度的数据进行提取。
genericVariables: 提取POST body 中的参数
Code Block | ||||
---|---|---|---|---|
| ||||
genericVariables: [
[
key: 'before',
value: '$.before',
expressionType: 'JSONPath',
regularFilter: '',
defaultValue: ''
],
[key: 'ref', value: '$.ref']
],
|
- value: JSONPath 或 XPath 表达式,取决于 expressType 参数值,用于从 POST body 中提取值。
- key: 从 POST Body 中提取出的值的新变量名,可用于pipeline其他步骤。
- expresssType: 可选, value的表达式类型,默认为JSONPath,当请求为XML内容时,必须指定 XPath 值。
- defaultValue:可选,当提取不到值,且defaultValue不为空时,则使用defaultValue作为返回值。
- regexpFilter:可选,过滤表达式,对提取出来的值进行过滤。regexpFilter做的事情其实就是
string.replaceAll(regexpFilter,"")
;。string是从HTTP请求中提取出来的值。
genericRequestVariables:从URL参数中提取值。
Code Block | ||||
---|---|---|---|---|
| ||||
genericRequestVariables: [
[
key: 'requestWithNumber',
regexpFilter: '[^0-9]',
],
[key: 'requestWithString', regexpFilter: '']
],
|
• key:提取出的值的新变量名,可用于pipeline其他步骤。
• regexpFilter:对提取出的值进行过滤。
genericHeaderVariables:从HTTP header 中提取值。
用法和genericRequestVariables一样。
token 参数
标识唯一性,值可以使用项目+时间
当Jenkins接收到 GWT 接口的请求时,会将请求代理给GWT插件处理。GWT插件内部会从Jenkins实例对象中取出所有的参数化Jenkins项目,包括pipeline, 然后进
行遍历。如果在参数化项目中GenericTrigger配置的token的值与Webhook请求时的token的值
致,则触发此参数化项目。
如果多个项目的此参数值一样,都会被触发。
GWT还可以根据我们提取出的值进行判断。示例如下:
- regexpFilterText:需要进行匹配的key。例子中,我们使用从POST body中提取出的refValue变量值。
- *regexpFilterExpression:正则表达式。
如果 regexpFilterText 参数的值符合 regexpFilterExpression 参数的正则表达式,则触发执行
打印内容
GWT 插件提供了三个供日调试打印日志的参数
- Silent response 当为true,只返回http 200 状态码,不返回触发结果
- Print post content 将 webhook 请求的内容打印到日志上
- Print contributed variables 将 提取后的变量打印到日志上
https://github.com/jenkinsci/generic-webhook-trigger-plugin