我在让Jenkins构建指定标签方面遇到问题。该标签是参数化构建的一部分,但我不知道如何将其传递给git插件以仅构建该标签。我每天花了3个小时,在堆栈溢出时我输给了大师。
我在让Jenkins构建指定标签方面遇到问题。该标签是参数化构建的一部分,但我不知道如何将其传递给git插件以仅构建该标签。我每天花了3个小时,在堆栈溢出时我输给了大师。
Answers:
我可以通过使用“分支生成”参数来做到这一点:
Branch Specifier (blank for default): tags/[tag-name]
用标签名称替换[tag-name]。
HEAD
。git插件的逻辑似乎可以比较这两个修订版,这在我的存储库中总是不相等的,因此总是触发新的构建。
使用Jenkins CI v.1.555,Git Client插件v.1.6.4和Git插件2.0.4,这些答案对我来说都不足够。
我想要一份为一个特定的,固定的(即非参数化的)标签为一个Git存储库构建的工作。我不得不从各种答案以及Thilo引用的“ build a Git tag”博客文章中找到 一个解决方案。
git push --tags
+refs/tags/*:refs/remotes/origin/tags/*
*/tags/<TAG_TO_BUILD>
(替换<TAG_TO_BUILD>
为您的实际标签名称)。对我来说,添加Refspec至关重要。尽管当我将其保留为空白时,默认情况下git存储库似乎正在获取所有远程信息,但是Git插件仍然会完全找不到我的标签。只有当我在refspec字段中明确指定“获取远程标签”时,Git插件才能识别并根据我的标签进行构建。
更新2014年5月7日:不幸的是,这种解决方案也确实会带来詹金斯CI(v.1.555)和Git仓库推送通知机制点菜的不良副作用藏匿网络挂接詹金斯:任何时间任何对信息库分支更新一推,标签构建作业也会再次触发。这导致一遍又一遍地不必要地重建相同的标签作业。我尝试使用“不使用工作空间强制轮询”选项来配置作业,但似乎没有效果。我可以防止Jenkins对标记作业进行不必要的构建的唯一方法是清除Refspec字段(即,删除+refs/tags/*:refs/remotes/origin/tags/*
)。
如果有人找到更优雅的解决方案,请编辑此答案并进行更新。我怀疑,例如,如果refspec特别是+refs/tags/<TAG TO BUILD>:refs/remotes/origin/tags/<TAG TO BUILD>
而不是星号,则可能不会发生。但是,目前,此解决方案对我们有用,我们仅在工作成功后删除多余的Refspec。
+refs/heads/*:refs/remotes/origin/*
,现在是+refs/heads/*:refs/remotes/origin/* +refs/tags/*:refs/remotes/origin/tags/*
。(我没有使用refspec进行太多工作,因此花了一些实验才能知道该字段是由空格分隔的。)
您不能告诉詹金斯使用Ref名称进行构建吗?如果是这样的话
refs/tags/tag-name
从我看到的有关詹金斯和哈德森的所有问题中,我建议改用TeamCity。我无需编辑任何配置文件即可使TeamCity正常工作。
git push --tags
在最新的Jenkins(1.639及更高版本)中,您可以:
1.0.1
在要构建字段的分支中指定了标记版本(例如)。
我做了这样的事情,它的工作:
Source Code Management
Git
Repositories
Advance
Name: ref
Refspec : +refs/tags/*:refs/remotes/origin/tags/*
Branches to build
Branch Specifier (blank for 'any') : v0.9.5.2
Jenkins日志确认它正在从标记获取源
检出修订0b4d6e810546663e931cccb45640583b596c24b9
(v0.9.5.2)
refspec
通过单击“高级”按钮来添加技巧。
我将Advanced-> Refspec字段设置为refs/tags/[your tag name]
。这似乎比Refspec的其他各种建议要简单,但对我来说效果很好。
更新23/7/2014-实际上,在进一步测试之后,事实证明这没有按预期进行。似乎HEAD版本仍在被检出。请撤消此操作,将其作为接受的答案。通过跟踪该线程中getgenes的帖子,我最终获得了一个可行的解决方案(3月30日)。对于我来说,不必要触发构建的那篇文章中提到的问题对我来说不是问题,因为我的工作是从上游工作而不是从轮询SCM触发的。
2018年4月更新 -在注释中指出这确实适用于一个人,并同意Jenkins文档。
refs/tags/<tagname>
,Jenkins文档说应该使用“使用”,它对我来说很好。也许该插件在原始帖子发布时是有问题的,但是...截至2018年4月,这是正确的答案。
refs/tags
前缀,而只需使用即可<tagname>
。YMMV,但是...出于我的目的,它工作正常。