如何在TeamCity中有条件地运行构建步骤

25

这是与此问题更为泛化的版本: 如何仅在特定分支上运行构建步骤?

例如,如果 '%teamcity.build.branch.is_default%' -eq 'true' 或者如果 '%teamcity.build.branch%' -eq 'master',我可以使用 PowerShell 脚本来运行 MSBuild,但这样我将失去与 TeamCity MSBuild 构建运行程序一起提供的可折叠日志。难道没有更简单的方法来有条件地运行构建步骤吗?


1
可能是条件地执行TeamCity构建步骤的重复问题。 - sferencik
2个回答

28

无法根据条件执行构建步骤。请投票支持相关请求:https://youtrack.jetbrains.com/issue/TW-17939
推荐的方法是为每个分支创建单独的构建配置。您可以使用模板来简化设置。在这种情况下,更容易解释结果,并且构建的统计信息将是有用的。
还可以参考相关的答案(建议使用黑客技巧)。


自2015年以来有什么变化吗?没有条件if步骤,像章鱼部署一样吗? - user8280126
7
2019年依然没有改变。 - IEatBagels
你可以通过在构建之前添加一个单独的第一层构建来解决这个问题,该构建仅运行评估条件的自定义脚本,并在没有更改的情况下将自身标记为“已取消”,然后让真正的构建依赖于快照并使用“On cancelled dependency: Cancel build”进行处理。 ... 或者 ... 您可以使用https://www.jetbrains.com/help/teamcity/build-script-interaction-with-teamcity.html在第一个构建步骤中设置参数,然后在剩余的每个步骤周围使用% param%作为条件(假设它们属于Comman Line runner类型)。 - conny
这个功能早就应该有了,特别是在使用Git时,您可以配置其他分支和拉取请求来触发构建。即使使用模板,为每个十几个这样的项目维护单独的配置也非常痛苦。在我们的情况下,管道中唯一可变的构建步骤是部署二进制文件的位置,并且我们有一个非常简单的PowerShell脚本,可以根据分支/PR进行切换。 - lesscode
2
看起来这个功能很快就会发布:https://youtrack.jetbrains.com/issue/TW-17939#focus=streamItem-27-3892126.0-0 - MikhailSP
显示剩余2条评论

16
JetBrains在TeamCity 2020.1中引入了条件构建步骤的支持。
以下是他们宣布这一新功能的博客文章摘录:
“您是否曾经想过在不同平台上执行不同的命令行脚本,或者将不同分支的更改部署到不同的暂存服务器?现在您可以自由地做任何事情!TeamCity 2020.1允许您指定构建步骤的条件,并仅在满足条件时执行它们。”

conditional build steps demo


2
如果我需要将步骤限制在几个分支中怎么办? - Kirill Metrik
@KirillMetrik,你可以使用“匹配”条件,并在正则表达式中指定分支... 例如:teamcity.build.branch 匹配 development|uat - Jurijs Kastanovs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接