【问题标题】:Conditionally execute a TeamCity build step有条件地执行 TeamCity 构建步骤
【发布时间】:2020-06-24 18:51:01
【问题描述】:

我正在为我们所有的项目定义一个通用的构建模板——我已将其置于“根项目”级别(感谢 TeamCity 8 的这一新功能)。我们的一些项目会创建一个安装程序,该安装程序需要由运行 powershell 脚本的单独“构建步骤”生成。但是,我们的一些项目没有创建这个安装程序,因此不需要这个额外的构建步骤。

有没有办法根据构建参数有条件地执行构建步骤?我认为也许可以在这里利用“禁用构建步骤”功能,但我没有看到通过参数定义步骤的启用/禁用状态的方法。

当然,我可以将这个条件加入到执行安装程序生成的构建步骤中,但如果可以在 teamcity 内部处理它会更简洁。

【问题讨论】:

  • 我对此也很感兴趣。请发布您提出的任何解决方案。
  • 我当前的解决方案是始终运行“创建安装程序”构建步骤,但要进行设置,以便在该步骤失败时构建不会失败。不理想,但它可以处理我当前的用例(我并不总是构建安装程序)。

标签: teamcity teamcity-8.0


【解决方案1】:

我在很多情况下都需要条件构建步骤,但遗憾的是,该功能目前不存在。 http://youtrack.jetbrains.com/issue/TW-17939

您没有理由不能拥有许多构建配置使用的模板,然后简单地禁用不需要创建安装程序的构建配置/项目中的构建步骤。在单个构建配置中禁用该步骤不会影响它所基于的父模板。

不像在 TC 中内置运行时/动态方法那样整洁,但我偶尔会使用它。我已经完成了 iwo 的建议。

【讨论】:

    【解决方案2】:

    似乎 TC 不支持在他们的级别执行条件运行器步骤,除了执行策略(仅当构建状态成功,如果所有先前的步骤成功完成,即使某些先前的步骤总是失败),但这不是你的想要。

    因此,您似乎需要为您的安装程序生成器 powershell 构建步骤提供一个自定义系统构建参数,例如 system.Generate 这应该是一个布尔值(您可以将其隐藏、提示、根据配置参数获取其值,等),然后在你的 powershell 运行器中,添加以下内容:

    param([int]$Generate)
    if ($Generate) {
      Write-Host "generating installer..."
       # call your func()
    } else {
       Write-Host "skip installer"
    }
    

    在您的运行程序配置中,添加 -Generate %system.Generate% 作为脚本参数(小心,不是额外的命令参数!)。 %system.Generate% 应根据其运行时值扩展为 1 或 0。

    【讨论】:

      【解决方案3】:

      从 2020.1 开始,现在似乎支持此功能。

      https://www.jetbrains.com/help/teamcity/what-s-new-in-teamcity-2020-1.html#WhatsNewinTeamCity2020.1-Conditionalbuildsteps

      现在,您可以通过新的执行方式对构建步骤进行精细控制 条件。运行构建时,TeamCity 将仅执行每个步骤 如果您配置的所有前提条件都满足 当前运行。

      在高级构建步骤设置中,单击添加条件并指定一个 TeamCity 提供的任何构建参数的逻辑条件 服务器或代理。您可以在示例条件中快速选择, 如:

      • 仅在默认分支中运行该步骤
      • 仅在发布分支中运行该步骤
      • 跳过个人构建步骤

      或者,创建一个自定义条件,TeamCity 会自动建议 支持的参数和值。广泛的逻辑条件和 参数可用。

      【讨论】:

        【解决方案4】:

        我一直在研究这个用例,因为我有一个非常相似的问题要解决。到目前为止,我发现的最佳解决方案是 fwise 的答案中所述的解决方案 - 在模板中包含您可能需要的所有可能步骤,然后根据具体情况禁用每个项目的不需要的步骤。

        因此,在您的情况下,您将在根级别包含“安装程序”构建步骤,但对于继承此模板且没有安装程序的任何项目,请禁用它。

        对于单个可选步骤,这感觉是一种不错的方法,但不可否认,它不能很好地扩展到具有许多可选步骤的大型复杂模板。

        我是从TeamCity documentation here

        • 您可以根据需要重新排序构建步骤。请注意,如果您有构建 从模板继承的配置,您不能对继承的重新排序 构建步骤。但是,您可以插入自定义构建步骤(不是 继承)在任何地方,以任何顺序,甚至之前或之间 继承的构建步骤。继承的构建步骤可以在 仅限原始模板。
        • 您可以暂时或永久禁用构建步骤,即使它 继承自构建配置模板。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-11-19
          • 2014-09-13
          • 2016-10-11
          • 2017-04-11
          • 2012-12-28
          • 1970-01-01
          相关资源
          最近更新 更多