6

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

我该如何实施?构建需要几分钟,所以如果有人在构建过程中推送到远程仓库,那么推送将失败,因为首先需要合并。如果不是这种情况,则合并将失败,因为没有可合并的内容...

4

1 回答 1

10

考虑让 Jenkins 在一个命名的分支中自己进行提交。这有很多优点——最大的好处是 Jenkins 永远不必担心其他人会推动对release分支的更改——只有 Jenkins 会这样做。您的 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但对于合理大小的回购,我喜欢从保证干净的石板开始。

于 2013-10-24T13:22:04.823 回答