在运行 TeamCity 8.0 的 CI 服务器上,我有一个构建配置,其最后一步是创建和推送新版本的 NuGet 包。
如果当前构建是个人构建,我想知道是否有办法抑制这两个步骤。
有什么线索吗?
在运行 TeamCity 8.0 的 CI 服务器上,我有一个构建配置,其最后一步是创建和推送新版本的 NuGet 包。
如果当前构建是个人构建,我想知道是否有办法抑制这两个步骤。
有什么线索吗?
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
}
在每个构建步骤上都有一个选项:执行步骤如果您选择选项“如果所有先前的构建成功”,那么该步骤将通过如果您选择:“即使之前的一些构建步骤失败”,它将执行。
您可以创建一个新的构建配置 - 省略这两个步骤。然后 - 安装 TeamCity Visual Studio 插件(假设您使用的是 VS),然后运行个人构建,选择您想要使用的构建配置。
与 Jordan 的回应类似,我认为最好的方法是将编译与打包/部署构建配置分开。事实上,如果您使用 Octopus 进行部署,那么您必须将 TeamCity Octopus 部署步骤与编译保持在单独的构建配置中,因为在构建配置成功完成之前不会填充 NuGet 提要。
如果使您的打包/部署构建配置成为编译构建配置的依赖项,并将构建触发器设置为仅在编译构建配置成功构建后触发,那么即使成功也不会在个人构建后触发:-
这样,您总是调用相同的构建配置进行编译,无论是通过 VS 上的开发人员使用 AddIn 还是通过 Web UI 的发布团队
希望这可以帮助
我们有一个类似的问题,我们只想在本地 Apache Maven 存储库发生更改时构建和部署它。
一种可能的解决方案:如果您的构建步骤是命令行(或可以是),请创建一个小型 shell 脚本来决定是否应该运行这些步骤。
TeamCity 2020.1 增加了对条件构建步骤的支持,并且有一个快速快捷方式可以跳过个人构建的构建步骤。