当在同一提交上推送新标签时,jenkins 不会触发构建

jenkins does not trigger build when a new tag is pushed on the same commit

如果将新标签推送到远程存储库,我想触发 jenkins 构建。 我看过很多帖子,但 none 似乎对我有用。 当我推送一个包含新提交的标签时,我的构建被成功触发,但是如果我在旧提交上推送一个新标签,它不会触发构建。

我已经使用 Jenkins 中的 git 插件配置它并添加 Refscpec 值为 +refs/tags/*:refs/remotes/origin/tags/*,分支说明符为 */tags/*

现在如果运行:

git push origin master
git tag release-v1
git push origin release-v1

标签release-v1的构建成功触发 但现在如果我这样做:

git push origin release-v2

未触发构建。

这意味着 jenkins 一直在寻找提交 ID,如果有一个新的提交 ID 与标签链接,它将构建作业。 但是我希望 jenkins 工作 运行 以防我想发布已经提交的具有新标签名称的另一个功能的代码。

我遇到了同样的问题并为此创建了一个解决方法。我决定使用后缀 _uat、_prod 等进行标记,这有助于我实现目标。为此,您还需要两个 Jenkins 作业。如果条件匹配,一个将触发另一个。

步骤 1 git tag -a release-v1_uat -m “提交消息”
git 推送原点 release-v1_uat

创建两个 Jenkins 作业

工作 1
定义存储库
在 Advance 部分的“Refspec”字段中输入:
+refs/tags/_uat:refs/remotes/origin/tags/_uat

在“要构建的分支”部分:
**/标签/*_uat

构建触发器
CHECK-> GitHub GITScm 轮询的钩子触发器

构建步骤
执行外壳
TAG=$(git describe --tags --abbrev=0)
回显 $TAG
回显 $TAG > /tmp/tagname
结果=echo $TAG | sed 's/.*\(....\)//'
如果 [[ $result == _uat ]];然后回声是;否则(出口 1); fi

点击右下角的 Advance 执行 shell
退出代码以设置构建不稳定(它将防止作业被任何其他标签触发)
将 1 放入盒子

Post-构建动作
检查:构建后删除工作区

工作 2(您的主要工作)
转到“构建其他项目后构建”
在框中提及您的作业 1 名称和 select“仅在构建稳定时触发”

不要忘记通过在作业 1

中生成的 cat /tmp/tagname 从文件中获取标签值

总有改进的余地,如果有更好的请分享workaround/solution。