【问题标题】:TeamCity Conditional SMB Upload pathTeamCity 条件 SMB 上传路径
【发布时间】:2020-05-21 23:26:59
【问题描述】:

使用 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

任何帮助将不胜感激。

【问题讨论】:

    标签: teamcity


    【解决方案1】:

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

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

    除了 Powershell,您还可以做一件事。 目标 URL 字段扩展变量。 (您可以通过在文本字段中输入百分号来说明这一点:TeamCity 立即开始建议变量名称。将其与上面的 步骤名称 文本字段进行比较:没有变量扩展。)因此,您可以以这种形式输入 目标 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) 在您的文件服务器上(在目录/文件系统级别)创建符号链接或连接,以便客户端可以访问上述内容

    //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% 的值并相应地设置 %myCleverVariable%,使用 TeamCity service messages

    【讨论】:

    • 非常感谢,选择了选项二。最后用一个四行 CLI 步骤来设置变量。仍然感觉有点 hacky,但一个比正在执行的脚本负载更好的解决方案。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多