繁体   English   中英

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

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

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

我已经在 J​​enkins 中使用 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 push origin release-v1_uat

创建两个 Jenkins 作业

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

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

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

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

单击执行 shell 下方的 Advance
退出代码以设置构建不稳定(这将防止作业从任何其他标签触发)
将 1 放入盒子中

构建后操作
检查:构建后删除工作区

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

不要忘记通过执行在作业 1 中生成的 cat /tmp/tagname 从文件中获取标签值

总有改进的余地,如果您有更好的解决方法/解决方案,请分享。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM