如果将新标签推送到远程存储库,我想触发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作业可以运行,以防万一我想用另一个新标签名发布另一功能的已提交代码。
答案 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 从文件中获取标签值
总有改进的余地,如果您有更好的解决方法/解决方案,请分享。