TeamCity 条件 SMB 上传路径

TeamCity Conditional SMB Upload path

使用 TeamCity 版本 2017.2.3(内部版本 51047)。

我有一个 SMB 上传构建步骤,我想将构建从默认分支上传到与所有其他构建不同的位置。

我看到以下变量会告诉我它是否是默认构建 %teamcity.build.branch.is_default% 但是我不太确定如何或什至可以为 SMB 上传步骤指定条件目标 URL。

在 IF 块上使用某种形式,或者内联三元语句。

这些都不是使用 PowerShell 完成的。在整个 UI 期间,如果可能的话,我宁愿保持这种状态。我们的旧 TeamCity 安装基本上只是一个美化的 PowerShell 脚本运行器,并成长为这个不可维护的单体,此外 PowerShell 是一种相当糟糕的语言。

基本上我想要的是建立在任何分支上

//DataStore/builds/my-api-%build.number%.zip

在默认分支上构建时转到

//DataStore/builds/default/my-api-%build.number%.zip

如有任何帮助,我们将不胜感激。

一般来说,这是不可能的。 SMB 上传 运行程序不允许您在其中的任何位置指定条件。

如果条件步骤可行,您可以创建两个步骤:从默认上传从非默认上传,每个都有一个不同 目标 URL。事实证明,条件构建步骤是 TeamCity 中投票最多的功能,请参阅 this ticket,但 JetBrains 非常反对这个想法。您可能想为这张票投票,或者至少对其进行监控。

除了 Powershell,您还可以做一件事。 Target URL 字段扩展变量。 (您可以通过在文本字段中键入百分号来说明这一点:TeamCity 立即开始建议变量名称。将此与上面的 Step name 文本字段进行比较:没有变量扩展。)因此,您可以按以下形式输入 目标 URL

//DataStore/builds/%teamcity.build.branch.is_default%/my-api-%build.number%.zip

这样,您最终会上传文件

//DataStore/builds/true/my-api-1234.zip
//DataStore/builds/false/my-api-1235.zip

这有点丑陋。您可以通过两种方式改进它:

1) 在您的文件服务器上创建符号链接或联结(在 directory/filesystem 级别),以便客户端可以访问上述内容,如

//DataStore/builds/default/my-api-1234.zip
//DataStore/builds/my-api-1235.zip

2) 更好的是,您可以设置一个包含值“/default”或“”的变量。然后,您可以将 目标 URL 更改为 //DataStore/builds%myCleverVariable%/my-api-%build.number%.zip。为此,您需要在此之前执行一个额外的步骤,即 Powershell 运行器,它将测试 %teamcity.build.branch.is_default% 的值并使用 TeamCity service messages.[=18= 相应地设置 %myCleverVariable% ]

conditional build step 功能已在 TeamCity 2020.1 中实现