有条件地执行TeamCity构建步骤

Stu*_*nge 47 teamcity teamcity-8.0

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

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

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

小智 17

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

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

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


iwo*_*iwo 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"
}
Run Code Online (Sandbox Code Playgroud)

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


Mar*_*ark 7

As of 2020.1, it appears this feature is now supported.

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

现在,您可以使用新的执行条件对构建步骤进行精细控制。运行构建时,仅当当前运行中满足您配置的所有先决条件时,TeamCity 才会执行每个步骤。

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

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

或者,创建自定义条件,TeamCity 将自动建议支持的参数和值。可以使用多种逻辑条件和参数。