在TeamCity的个人构建中跳过步骤

8
在我的运行TeamCity 8.0的CI服务器上,我有一个构建配置,其最后步骤是创建并推送NuGet包的新版本。我想知道是否有一种方法可以在当前构建是个人构建时禁止这两个步骤。有什么线索吗?
5个回答

7

Teamcity中有一个环境变量可以告诉你这是否是个人构建,BUILD_IS_PERSONAL:

参见http://confluence.jetbrains.com/display/TCD7/Predefined+Build+Parameters

例如,使用msbuild runner(只需提供nuget路径)

<Project DefaultTargets="Pack" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  <Target Name="Pack" Condition="$(BUILD_IS_PERSONAL)!='True'">
    <Message Text="Personal: $(BUILD_IS_PERSONAL)"/>
    <Exec Command="$(NUGETPATH)\nuget pack $(NugetProject)"/>
  </Target>
</Project>

或者,您可以使用额外的构建步骤停止构建步骤的条件,从而使它们有条件:

添加一个额外的构建步骤,使用 PowerShell-

if (([environment]::GetEnvironmentVariable("BUILD_IS_PERSONAL","Process")) -eq "True")
{ 
  throw
}

在每个构建步骤中,都有一个选项:执行步骤。 如果您选择“如果所有先前的构建都成功”,则该步骤将通过。 如果您选择:“即使之前的某些构建步骤失败了”,它也会执行。

很遗憾默认的运行器不使用这个功能来防止步骤的执行。 - Kralizek
我猜这可能是最好的选择。他们本可以在“如果执行步骤”下拉菜单中添加这个选项 :( - Kralizek

0

您可以创建一个新的构建配置 - 省略这两个步骤。然后 - 安装TeamCity Visual Studio插件(假设您正在使用VS),然后运行个人构建,选择您想要使用的构建配置。


如果我的问题只出现在很少的一些配置中,这个解决方案可能是可行的。不幸的是,我有一个被40个不同配置使用的模板,要维护两倍数量的配置相当困难:(另外,我也会失去真正配置的统计信息。 - Kralizek

0

与Jordan的回答类似,我认为最好的方法是将编译与打包/部署构建配置分开。实际上,如果您使用Octopus进行部署,则必须将TeamCity Octopus部署步骤保留在与编译分开的单独的构建配置中,因为NuGet feed直到成功完成构建配置后才会被填充。

如果将您的打包/部署构建配置设置为编译构建配置的依赖项,并将构建触发器设置为仅在编译构建配置成功构建后触发,则即使个人构建成功,它也不会触发: -

TeamCity packaging / deployment build trigger

这样,无论是通过 VS 上的 AddIn 还是通过 Web UI 的发布团队,您始终调用相同的构建配置进行编译。

希望这可以帮到您。


0

我们有一个类似的问题,我们只想在本地 Apache Maven 仓库发生更改时才构建和部署它。

一种可能的解决方案:如果您的构建步骤是 命令行(或可以是),则创建一个小型 shell 脚本来决定是否应该运行这些步骤。


0
TeamCity 2020.1 已经添加了对条件构建步骤的支持,并为个人构建跳过构建步骤提供了快捷方式。

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