我有一个由 Jenkins 触发的构建脚本。首先 Jenkins 将从 repo (Bitbucket) 中获取最新版本,然后它会启动构建脚本。现在,如果构建脚本以“发布”模式启动,脚本将对某些文件进行更改(以跟踪版本号和构建日期,并在 repo 上创建标签)这些更改需要推送回远程回购。
我该如何实施?构建需要几分钟,所以如果有人在构建过程中推送到远程仓库,那么推送将失败,因为首先需要合并。如果不是这种情况,则合并将失败,因为没有可合并的内容...
考虑让 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
通过这样的设置,您将获得一些优势:
请注意,|| true
告诉 Jenkins 不要在非零退出代码上构建失败以进行合并(如果没有要合并的内容),也不要提交任何内容。
而不是每次都克隆新鲜的,hg pull ; hg update -C release
但对于合理大小的回购,我喜欢从保证干净的石板开始。