2013-07-08 57 views
42

我在定义我们的所有项目通用的构建模板的工作 - 我已经放置在“根项目”级(感谢的TeamCity 8的新功能)。我们的一些项目创建了一个安装程序,该安装程序需要由运行PowerShell脚本的单独“构建步骤”生成。但是,我们的一些项目不创建此安装程序,因此不需要此额外的构建步骤。有条件执行的TeamCity构建步骤

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

当然,我可以烤这个条件到执行安装程序生成的构建步骤,但它是清洁,如果这可以从TeamCity的自身内处理。

+0

我对此也很感兴趣。请张贴您提出的任何解决方案。 –

+0

我目前的解决方案是始终运行“创建安装程序”构建步骤,但要进行设置,以便在该步骤失败时构建不会失败。不理想,但它处理我目前的使用情况(我并不总是构建安装程序)。 –

回答

8

看来TC不除执行政策的水平支持条件亚军步执行(仅在构建状态是成功的,如果前面的所有步骤成功完成,即使一些上一个步骤失败了,总是),但不是什么你要。

所以你似乎需要为你的安装程序生成器提供一个自定义的系统构建参数,像system.Generate这样的应该是一个布尔(你可以隐藏它,提示,获取它的值基于配置参数等),然后在你的PowerShell亚军,补充一点:

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

在你跑步的配置,加 - 生成%system.Generate%作为脚本参数(小心,不要将其他命令参数)! %system.Generate%应根据其运行时值扩展到1或0。

12

我有必要多次有条件的编译步骤,但很可惜,该功能不会在瞬间存在。 http://youtrack.jetbrains.com/issue/TW-17939

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

并不像内置TC的运行时/动态方法那么整洁,但我偶尔会使用它。我已经完成了iwo的建议。

0

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

所以你的情况,你会包括你的“安装”建立在根级别的一步,但禁用它继承了其此模板,并且没有安装程序的任何项目。

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

我就捡起从TeamCity documentation here

  • 您可以重新排列根据需要生成步骤。请注意,如果您有从模板继承的构建 配置,则无法重新排列继承的 构建步骤。但是,您可以在任意位置以任意顺序插入自定义构建步骤(而不是继承的 ),甚至可以在继承构建步骤之前或之间插入。继承的构建步骤只能在 原始模板中重新排序。
  • 即使从构建配置模板继承 ,也可以临时或永久禁用构建步骤。
相关问题