Build 在生成结束时将数据提交给Mercurial

Build 在生成结束时将数据提交给Mercurial,build,mercurial,jenkins,Build,Mercurial,Jenkins,我有一个由Jenkins触发的构建脚本。 首先Jenkins将从repo(Bitbucket)获取最新版本,然后它将启动构建脚本。 现在,如果构建脚本在“发布”模式下启动,脚本将对某些文件进行更改(以跟踪版本号和构建日期,并在repo上创建标记) 需要将这些更改推回到远程回购 我如何实现这一点? 构建需要几分钟的时间,因此如果有人在构建过程中推送远程repo,那么推送将失败,因为首先需要合并。如果情况并非如此,则合并将失败,因为没有要合并的内容。请考虑让Jenkins自己在命名分支中进行提交。这

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

我如何实现这一点?
构建需要几分钟的时间,因此如果有人在构建过程中推送远程repo,那么推送将失败,因为首先需要合并。如果情况并非如此,则合并将失败,因为没有要合并的内容。

请考虑让Jenkins自己在命名分支中进行提交。这有很多好处——最大的好处是Jenkins不必担心其他人推动对
发布
分支的更改——只有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的标记提交位于“release”分支中,但仍然可以从默认分支访问
请注意,
| | true
告诉Jenkins不要在非零退出代码的基础上构建失败的合并代码(如果没有要合并的代码)和提交的代码

而不是每次都克隆新鲜的,你可以
hg-pull;hg update-C发行版
但对于合理规模的回购,我喜欢在保证无瑕疵的情况下开始