在我的运行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 feed直到成功完成构建配置后才会被填充。
如果将您的打包/部署构建配置设置为编译构建配置的依赖项,并将构建触发器设置为仅在编译构建配置成功构建后触发,则即使个人构建成功,它也不会触发: -
这样,无论是通过 VS 上的 AddIn 还是通过 Web UI 的发布团队,您始终调用相同的构建配置进行编译。
希望这可以帮到您。
我们有一个类似的问题,我们只想在本地 Apache Maven 仓库发生更改时才构建和部署它。
一种可能的解决方案:如果您的构建步骤是 命令行(或可以是),则创建一个小型 shell 脚本来决定是否应该运行这些步骤。