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

时间:2019-04-01 10:02:57

标签: git jenkins github jenkins-plugins git-tag

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

我已经在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作业可以运行,以防万一我想用另一个新标签名发布另一功能的已提交代码。

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题并为此创建了一个解决方法。我决定用后缀 _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

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

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

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

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

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

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

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

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