有条件地执行TeamCity构建步骤

有条件地执行TeamCity构建步骤,teamcity,teamcity-8.0,Teamcity,Teamcity 8.0,我正在为我们所有的项目定义一个通用的构建模板——我已经将其置于“根项目”级别(多亏了TeamCity 8的这个新特性)。我们的一些项目创建了一个安装程序,它需要由运行powershell脚本的单独“构建步骤”生成。但是,我们的一些项目不创建此安装程序,因此不需要此额外的构建步骤 是否有一种基于构建参数有条件地执行构建步骤的方法?我认为这里也许可以利用“禁用构建步骤”功能,但我看不到通过参数定义步骤的启用/禁用状态的方法 当然,我可以将此条件嵌入到执行安装程序生成的构建步骤中,但如果可以从team

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

是否有一种基于构建参数有条件地执行构建步骤的方法?我认为这里也许可以利用“禁用构建步骤”功能,但我看不到通过参数定义步骤的启用/禁用状态的方法


当然,我可以将此条件嵌入到执行安装程序生成的构建步骤中,但如果可以从teamcity本身内部处理,则会更干净。

除了执行策略外,TC似乎不支持在其级别执行条件运行程序步骤(仅当构建状态为successful时,如果之前的所有步骤都成功完成,即使某些上一步失败,也始终如此),但这不是您想要的

因此,您似乎需要为安装程序生成器powershell build step-like 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。

我曾多次需要条件构建步骤,但遗憾的是,该功能目前不存在

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


不像TC内置运行时/动态方法那样整洁,但我偶尔会使用它。我也做过iwo建议的。我一直在研究这个用例,因为我有一个非常类似的问题要解决。到目前为止,我发现的最佳解决方案是fwise的答案中所述的解决方案-包括您在temp中可能需要的所有可能步骤延迟,但在个案基础上禁用每个项目不需要的步骤

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

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

这是我从网上找到的:

  • 您可以根据需要对构建步骤重新排序 从模板继承的配置,不能对继承的配置重新排序 生成步骤。但是,您可以插入自定义生成步骤(而不是 继承的)在任何地方,以任何顺序,甚至在之前或之间 继承的生成步骤。继承的生成步骤可以在 仅限原始模板
  • 您可以暂时或永久禁用生成步骤,即使 从生成配置模板继承

从2020.1开始,似乎现在支持此功能

现在,您可以通过新的执行对构建步骤进行细粒度控制 运行构建时,TeamCity将仅执行每个步骤 如果您配置的所有前提条件在 当前运行

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

  • 仅在默认分支中运行该步骤
  • 仅在发布分支中运行该步骤
  • 跳过个人构建中的步骤
或者,创建自定义条件,TeamCity将自动建议 支持的参数和值。广泛的逻辑条件和 参数可用


我对此也很感兴趣。请发布您提出的任何解决方案。我当前的解决方案是始终运行“创建安装程序”构建步骤,但要进行设置,以便在该步骤失败时构建不会失败。这并不理想,但它可以处理我当前的用例(我并不总是构建安装程序)。