首页 文章

有条件地执行TeamCity构建步骤

提问于
浏览
44

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

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

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

3 回答

  • 8

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

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

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

  • 15

    除了执行策略之外,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 .

  • 0

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

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

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

    我从TeamCity documentation here中选择了这个:

    • 您可以根据需要重新排序构建步骤 . 请注意,如果您具有从模板继承的构建配置,则无法重新排序继承的构建步骤 . 但是,您可以在任何位置以任何顺序插入自定义构建步骤(不是继承),甚至可以在继承的构建步骤之前或之间插入 . 继承的构建步骤只能在原始模板中重新排序 .

    • 您可以临时或永久禁用构建步骤,即使它是从构建配置模板继承的 .

相关问题