从Github Tag触发Jenkins管道构建

时间:2020-07-06 16:16:06

标签: jenkins jenkins-pipeline

当尝试将特定格式的标签推送到我的GitHub存储库时,我试图触发Jenkins Pipeline构建( NOT MultiBranch Pipeline)。因此,如果推送到存储库的任何分支都被标记为Major.Minor.Patch格式,则会触发构建。 123.123.123

我已经设置了一个可以正常工作并可以访问Jenkins的Webhook(我可以在Jenkins配置页面上的Github Hook Log中看到它)。但不幸的是,它不会触发构建。

我尝试将refspec设置为:

+refs/tags/*:refs/remotes/origin/tags/*

我已经将它与一个分支标识符一起

:origin/tags/[0-9]+\.[0-9]+\.[0-9]+

我已经阅读了所有可以找到的文章,并仔细检查了StackOverflow,但我很茫然。我可以通过将分支标识符设置为**/tags/**来使其工作,但这太开放了,并且会触发许多冗余构建。

如果任何人都可以帮助实现这一目标,将不胜感激。另外,我不确定是否应该使用管道到多分支管道来实现这一目标?

开始对詹金斯(Jenkins)是个好选择失去信心,所以在我上船之前请帮忙!

谢谢!

1 个答案:

答案 0 :(得分:0)

我更喜欢使用generic webhook trigger plugin

这允许您将令牌分配给特定的Pipeline作业,以便当您的GitHub Webhook发送http请求时,将触发该令牌:

  • http:// JENKINS_URL / generic-webhook-trigger / invoke?token = {token-goes-here}

Github文档描述了http payload content的推送事件

您可以使用JSONPath表达式解析http有效负载以获取标签字符串,然后使用Major.Minor.Patch正则表达式过滤是否运行Jenkins作业

我尚未对其进行测试,但是管道代码可能如下所示:

triggers {
        GenericTrigger(
            genericVariables: [
                [key: 'tagString',
                 value: '$.ref',
                 expressionType: 'JSONPath']
            ],
            token: 'example-token',
            printContributedVariables: true,
            printPostContent: true,
            // only trigger if tag follows Major.Minor.Patch regex
            regexpFilterText: '$tagString',
            regexpFilterExpression: '<tag-regex-here>'
        )
}