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 解决方案
我们想使用 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 解决方案