有条件地执行TeamCity构建步骤

时间:2013-07-08 15:40:51

标签: teamcity teamcity-8.0

我正在为所有项目定义通用构建模板 - 我已将其置于“根项目”级别(感谢TeamCity 8的这一新功能)。我们的一些项目创建了一个安装程序,需要通过运行powershell脚本的单独“构建步骤”生成。但是,我们的一些项目不会创建此安装程序,因此不需要这个额外的构建步骤。

有没有办法根据构建参数有条件地执行构建步骤?我想也许可以在这里利用“禁用构建步骤”功能,但我没有看到通过参数定义步骤的启用/禁用状态的方法。

当然,我可以将这个条件烘焙到执行安装程序生成的构建步骤中,但如果可以在teamcity本身内处理它,那么它会更清晰。

4 个答案:

答案 0 :(得分:17)

我已经在很多场合需要条件构建步骤但是唉,此功能目前还不存在。 http://youtrack.jetbrains.com/issue/TW-17939

您没有理由不能使用许多构建配置使用的模板,然后只需在构建配置/项目中禁用不需要创建安装程序的构建步骤。禁用单个构建配置中的步骤不会影响它所基于的父模板。

不像TC中内置运行时/动态方法那样整洁,但有时我会使用它。我已经完成了iwo的建议。

答案 1 :(得分:10)

似乎TC不支持条件运行程序步骤执行,除了执行策略(仅当构建状态成功,如果所有先前步骤成功完成,即使某些prev步骤失败,总是)但这不是你的想。

所以你似乎需要为你的安装程序生成器powershell构建步骤提供一个自定义的系统构建参数,就像system.Generate一样,它应该是一个bool(你可以让它隐藏,提示,根据一个配置参数得到它的值,等),然后在你的powershell亚军中添加:

param([int]$Generate)
if ($Generate) {
  Write-Host "generating installer..."
   # call your func()
} else {
   Write-Host "skip installer"
}

在你的跑步者配置中,添加-Generate%system.Generate%作为脚本参数(小心,不是额外的命令参数!)。 %system.Generate%应根据其运行时值扩展为1或0。

答案 2 :(得分:2)

从2020.1开始,似乎已支持此功能。

请参见https://www.jetbrains.com/help/teamcity/what-s-new-in-teamcity-2020-1.html#WhatsNewinTeamCity2020.1-Conditionalbuildsteps

现在,您可以通过新的执行来精细控制构建步骤 条件。运行构建时,TeamCity仅执行每个步骤 如果您配置的所有前提条件都满足 当前运行。

在高级构建步骤设置中,单击添加条件并指定一个 TeamCity提供的任何构建参数的逻辑条件 服务器或代理。您可以在示例条件中快速选择, 例如:

  • 仅在默认分支中运行该步骤
  • 仅在发布分支中运行步骤
  • 跳过个人构建步骤

或者,创建一个自定义条件,TeamCity将自动建议 支持的参数和值。一系列逻辑条件和 参数可用。

答案 3 :(得分:0)

我一直在研究这个用例,因为我有一个非常类似的问题需要解决。到目前为止,我发现的最佳解决方案是fwise的答案 - 在模板中包含您可能需要的所有可能步骤,但随后根据具体情况禁用每个项目的不必要步骤。

因此,在您的情况下,您将在根级别包含“安装程序”构建步骤,但对于继承此模板且没有安装程序的任何项目,请禁用它。

对于单个可选步骤,这感觉就像一个好的方法,但不可否认,它不能很好地扩展到具有许多可选步骤的大型复杂模板。

我从TeamCity documentation here

中选择了这个
  • 您可以根据需要重新排序构建步骤。请注意,如果您有构建 从模板继承的配置,不能重新排序继承 构建步骤。但是,您可以插入自定义构建步骤(不是 继承)在任何地方和任何顺序,甚至在之前或之间 继承了构建步骤。继承的构建步骤可以在中重新排序 仅限原始模板。
  • 您可以临时或永久禁用构建步骤,即使它也是如此 继承自构建配置模板。