在构建结束时将数据提交给Mercurial

时间:2013-10-24 09:24:12

标签: build mercurial jenkins

我有一个由Jenkins触发的构建脚本。 第一个Jenkins将从repo(Bitbucket)获得最新版本,然后它将启动构建脚本。 现在,如果构建脚本以“发布”模式启动,脚本将对某些文件进行更改(以跟踪版本号和构建日期,并在repo上创建标记) 需要将这些更改推回到远程仓库。

我该如何实现? 构建需要几分钟,因此如果有人在构建期间推送到远程仓库,则推送将失败,因为首先需要合并。如果不是这种情况,合并将失败,因为没有任何东西可以合并......

1 个答案:

答案 0 :(得分:10)

考虑让Jenkins在自己的命名分支中执行提交。这有很多优点 - 最大的问题是詹金斯从不担心其他人推动改变release分支 - 只有詹金斯会。您的Jenkins构建脚本可能如下所示:

hg clone --updaterev release http://path/to/repo
hg merge default || true   # merge the latest from master
...build here...
hg commit -m "Auto commit from Jenkins for build $BUILDNUMBER" || true
hg tag build_$BUILDNUMBER
hg push

通过这样的设置,您将获得一些优势:

  • 失败的构建不会创建新的提交
  • 詹金斯的推动将永远成功
  • Jenkins的标签提交位于“发布”分支中,但仍可从默认分支
  • 访问

请注意,|| true告诉Jenkins不要使用非零退出代码进行构建失败(如果没有要合并的东西),也不要提交任何内容。

而不是每次只能hg pull ; hg update -C release克隆新鲜,但对于合理大小的回购,我喜欢以保证清洁的方式开始。