有条件地执行TeamCity构build步骤

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

有没有一种方法来基于生成参数有条件地执行构build步骤? 我认为也许可以在这里利用“禁用构build步骤”function,但我没有看到通过参数定义步骤的启用/禁用状态的方法。

当然,我可以将这个条件烘焙到执行安装程序生成的构build步骤中,但是如果可以从teamcity自身内部进行处理,则会更加清晰。

我有很多场合需要有条件的构build步骤,但唉,此function目前不存在。 http://youtrack.jetbrains.com/issue/TW-17939

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

不像TC内置的运行时/dynamic方法那么整洁,但我偶尔会使用它。 我已经做了iwobuild议。

看起来,TC不支持在执行策略之外的其他级别的条件执行器步骤执行(只有在构build状态成功的情况下,如果所有先前的步骤都成功完成,即使总是有一些先前的步骤失败),但这不是您想要的。

所以看来你需要提供一个自定义的系统构build参数为您的安装程序生成器PowerShell的生成步骤像system.Generate应该是一个布尔(你可以使其隐藏,提示,获取其基于configuration参数值等),然后在你的PowerShell运行器中添加这个:

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

在你的runnerconfiguration中,添加-Generate%system.Generate%作为脚本参数(小心,不要附加命令参数!)。 %system.Generate%应根据其运行时值扩展为1或0。

我一直在研究这个用例,因为我有一个非常类似的问题需要解决。 到目前为止,我发现的最好的解决scheme就是fwise的答案 – 在你的模板中包含你可能需要的所有可能的步骤,然后在个案的基础上禁用每个项目的不需要的步骤。

所以在你的情况下,你应该在根目录下包含你的“安装程序”构build步骤,但是对于inheritance这个模板并且没有安装程序的任何项目,禁用它。

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

我从这里的TeamCity文档中select了这个:

  • 您可以根据需要重新编排构build步骤。 请注意,如果您有从模板inheritance的构buildconfiguration,则无法重新排列inheritance的构build步骤。 但是,即使在inheritance构build步骤之前或之间,也可以在任意位置以任何顺序插入自定义构build步骤(不是inheritance的)。 inheritance的构build步骤只能在原始模板中重新sorting。
  • 您可以暂时或永久禁用构build步骤,即使它是从构buildconfiguration模板inheritance的。