- Created by 红旗公, last modified on 2020-02-24
此插件是针对JIRA以Jenkins的集成,主要是利用Jira的webhooks功能向jenkins发送相就通知,从而来触发jenkins的Job功能。
此插件是jenkins插件,需要安装在jenkins中。
此插件会有一下特性
- 接受任意http的请求,接收地址是:<J
ENKINS_URL>/generic-webhook-trigger/invoke
- 提供参数值
- 用这些值作为变量触发生成构建
只有当提供的正则表达式与提取的变量匹配时,才有触发作业的可选功能。下面是一个示例,假设内容如下所示:
{ "before": "1848f1236ae15769e6b31e9c4477d8150b018453", "after": "5cab18338eaa83240ab86c7b775a9b27b51ef11d", "ref": "refs/heads/develop" }
然后可以有一个变量,从post内容解析,名为ref,类型为JSONPath,表达式类似于$.ref。
可选的筛选文本可以设置为$ref,筛选regexp设置为^(refs/heads/develop | refs/heads/feature/+)$,以便仅为develop和feature分支触发生成。
触发特定的Job
在多个作业中使用该插件时,将具有相同的URL触发器所有作业。如果只想触发某个作业,则可以:
- 使用token参数可以为不同的作业使用不同的令牌。仅使用令牌意味着只有具有该确切令牌的作业才会对该请求可见。这将提高性能并减少每次调用的响应。
- 或者,添加一些请求参数(或Head,或post内容)并使用regexp筛选器仅在该参数具有特定值时触发。
Token参数
有一个特殊的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串中其它的值,可以通过“_”一步步的来进行获得,比如
{ "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" } ] } }
可以获得以下变量并得到其值
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项目。代码如下
#!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 中的参数
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参数中提取值。
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
- No labels