2

我有一个带有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 文件中。我想知道在我的推广步骤中是否有一种简单的方法可以实现它。

4

2 回答 2

2

该 build.xml 必须是您的 Jenkins 脚本正在创建的东西——Mercurial 不是。

您的 Mercurial 命令看起来不错。

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

hg id > $WORKSPACE/built-version

然后将built-version其作为构建的工件之一包含在内。然后您的促销脚本可以执行以下操作:

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

或任何与此等效的窗口。

于 2013-03-01T01:53:19.253 回答
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
于 2013-03-04T18:29:07.820 回答