7

在运行 TeamCity 8.0 的 CI 服务器上,我有一个构建配置,其最后一步是创建和推送新版本的 NuGet 包。

如果当前构建是个人构建,我想知道是否有办法抑制这两个步骤。

有什么线索吗?

4

5 回答 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
}

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

于 2013-10-14T09:59:15.740 回答
0

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

于 2013-09-19T20:58:00.050 回答
0

与 Jordan 的回应类似,我认为最好的方法是将编译与打包/部署构建配置分开。事实上,如果您使用 Octopus 进行部署,那么您必须将 TeamCity Octopus 部署步骤与编译保持在单独的构建配置中,因为在构建配置成功完成之前不会填充 NuGet 提要。

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

TeamCity 打包/部署构建触发器

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

希望这可以帮助

于 2014-03-19T10:53:40.407 回答
0

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

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

于 2015-10-13T05:12:22.910 回答
0

TeamCity 2020.1 增加了对条件构建步骤的支持,并且有一个快速快捷方式可以跳过个人构建的构建步骤。

于 2020-05-21T15:21:54.253 回答