我有一个构建配置,其最后一步是创建和推送新版本的NuGet包。
我想知道如果当前版本是个人版本,是否有办法禁止这两个步骤。
有任何线索吗?
答案 0 :(得分:6)
在团队城中暴露的环境变量可以告诉您这是否是个人构建BUILD_IS_PERSONAL:
请参阅http://confluence.jetbrains.com/display/TCD7/Predefined+Build+Parameters
E.g。使用msbuild运行器(你只需要提供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
}
在每个构建步骤中都有选项:执行步骤 如果您选择选项&#34;如果之前的所有构建成功&#34;然后步骤将通过 如果您选择:&#34;即使某些先前的构建步骤失败&#34;它会执行。
答案 1 :(得分:0)
您可以创建新的构建配置 - 省略这两个步骤。然后 - 安装TeamCity Visual Studio插件(假设您使用的是VS),然后运行个人构建,选择您要使用的构建配置。
答案 2 :(得分:0)
与Jordan的响应类似,我认为最好的方法是将编译与打包/部署构建配置分开。事实上,如果您使用Octopus进行部署,则必须将TeamCity Octopus部署步骤保留在编译的单独构建配置中,因为NuGet源不会在构建配置成功完成之后填充。
如果使您的打包/部署构建配置成为编译构建配置的依赖项,并将构建触发器设置为仅在成功构建编译构建配置后触发,那么即使成功构建,也不会在个人构建后触发: -
这样,无论是通过Web上的开发人员通过Web UI使用AddIn还是Release Team,您都可以调用相同的编译配置
希望这有帮助
答案 3 :(得分:0)
我们遇到类似的问题,我们只想在更改后构建并部署我们的本地Apache Maven存储库。
一种可能的解决方案:如果构建步骤是命令行(或可以),请创建一个小的shell脚本来决定是否应该运行这些步骤。
答案 4 :(得分:0)
TeamCity 2020.1增加了对conditional build steps的支持,并且有一个快速捷径可以跳过个人构建的构建步骤。