在Jenkins中推广构建时,如何在Mercurial中标记特定修订?

时间:2013-02-28 23:06:22

标签: mercurial jenkins

我有一个带有Promoted Builds插件和Mercurial插件的Jenkins CI服务器。在构建被提升时我想要做的是标记Mercurial中与该构建对应的修订。

Mercurial插件公开了一个名为MERCURIAL_REVISION_NUMBER的环境变量,它在构建运行时填充,但在运行时不会填充。因此,当我尝试在促销中的“执行Windows批处理命令”步骤中执行以下操作时:

hg tag --rev %MERCURIAL_REVISION_NUMBER% "Promoted-%PROMOTED_NUMBER%-%PROMOTED_ID%"

失败,因为%MERCURIAL_REVISION_NUMBER%计算为空字符串,因此没有为-rev参数提供值。

我注意到Mercurial修订版保存在每个版本的build.xml文件中。我想知道在推广步骤中是否有一种简单的方法可以实现它。

2 个答案:

答案 0 :(得分:2)

那个build.xml必须是你的Jenkins脚本正在创建的东西 - Mercurial没有。

你的Mercurial命令看起来很好。

一种选择是将构建信息作为jenkins脚本的一部分放入文件中:

hg id > $WORKSPACE/built-version

然后包含built-version作为构建的工件之一。然后您的宣传脚本可以:

hg tag --rev $(< built-version) "Promoted-${PROMOTED_NUMBER}-${PROMOTED_ID}"

或等同于此的窗口。

答案 1 :(得分:0)

我最终使用Powershell脚本执行此操作。这是我的第一个PS脚本,所以我肯定对任何建议的改进持开放态度。

# Read the appropriate Hg revision from build.xml and tag it
$filename = "..\builds\" + $env:PROMOTED_ID  + "\build.xml"
[xml]$build = Get-content $filename
$hg = $build.SelectSingleNode("/build/actions/hudson.plugins.mercurial.MercurialTagAction")
write-host "Tagging revision: " + $hg.rev
hg tag --force --rev $hg.rev "Promoted-$env:PROMOTED_NUMBER-$env:PROMOTED_ID"
hg push --force