Jenkins:如何在 git 标签上触发管道

Jenkins: how to trigger pipeline on git tag

我们想使用 Jenkins 在特定的项目里程碑上生成 releases/deployments。当标签被推送到 Git 存储库时,是否可以触发 Jenkins 管道(在 Jenkinsfile 或 Groovy 脚本中定义)?

我们托管了私有 Gitlab 服务器,因此 Github 解决方案不适用于我们的案例。

这是目前管道/多分支工作流中非常缺乏的东西。在这里查看一张票:https://issues.jenkins-ci.org/browse/JENKINS-34395

如果您不反对使用发布分支而不是标签,您可能会发现这样做更容易。例如,如果您决定将所有以 release- 开头的分支都视为 "release branches",您可以去...

if( env.BRANCH_NAME.startsWith("release-") ) {
 // groovy code on release goes here
}

而如果你需要使用release-后面的名字,比如release-10.1变成10.1,就创建一个这样的变量...

if( env.BRANCH_NAME.startsWith("release-") ) {
 def releaseName = env.BRANCH_NAME.drop(8)
}

这两个可能都需要一些方法白名单才能发挥作用。

我也有同样的愿望,我自己也做了,也许不漂亮,但它奏效了...

在您的管道作业中,标记 "This project is parameterized" 并为您的代码添加一个参数。然后在管道脚本中检查标签是否存在。

创建一个 运行 脚本的自由式作业:

  • 结帐
  • 运行 git describe --tags --abbrev=0 获取最新标签。
  • 根据 运行ning 构建列表(如在文件中)检查该标记。
  • 如果构建没有发生,通过 url 将您的标签作为参数传递来触发管道作业(在 "Build Triggers" 下的管道作业中设置“远程触发构建(例如从脚本),它将显示正确的 url.
  • 将标签添加到您的 运行ning 构建列表中,这样它就不会再次被触发。
  • 经常运行从事这份工作。

如果您使用多分支管道,则有一个发现标签。使用那个加上 Spencer 解决方案