Page tree
Skip to end of metadata
Go to start of metadata

此插件是针对JIRA以Jenkins的集成,主要是利用Jira的webhooks功能向jenkins发送相就通知,从而来触发jenkins的Job功能。

此插件是jenkins插件,需要安装在jenkins中。

此插件会有一下特性

  • 接受任意http的请求,接收地址是:<JENKINS_URL>/generic-webhook-trigger/invoke
  • 提供参数值
    • 获得通过 JSONPath or XPath 方式Post过来的参数
    • 通过请求参数获得值
    • 从Headers头获得参数值
  • 用这些值作为变量触发生成构建


只有当提供的正则表达式与提取的变量匹配时,才有触发作业的可选功能。下面是一个示例,假设内容如下所示:

{
  "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 :

curl -vs -H "Authorization: Bearer abc123" http://localhost:8080/jenkins/generic-webhook-trigger/invoke 2>&1


白名单

白名单可以在Jenkins全局配置页面中配置。白名单将阻止任何未在此列表中配置的对插件的请求。主机可以为空,以允许任何静态IP、CIDR或范围,规则可以如下:

  • 1.2.3.4
  • 2.2.3.0/24
  • 3.2.1.1-3.2.1.10
  • 2001:0db8:85a3:0000:0000:8a2e:0370:7334
  • 2002:0db8:85a3:0000:0000:8a2e:0370:7334/127
  • 2001:0db8:85a3:0000:0000:8a2e:0370:7334-2001:0db8:85a3:0000:0000:8a2e:0370:7335

默认值

插件可以配置为默认值。如下所示:

但如果手动执行作业(或重播pipeline),则不会使用此默认值。因为插件根本不会被调用。您可以通过检查“this job is parametized”来解决这个问题,并添加一个与在插件中配置的参数同名的参数,如下所示:

现在,当您手动触发作业、重播pipeline以及使用插件触发作业时,都将使用此默认值!

解析JSON串

对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



https://www.jianshu.com/p/7873d2f0dd3e

  • No labels