【问题标题】:Execute step in TeamCity ONLY if previous step was failed仅当上一步失败时才在 TeamCity 中执行步骤
【发布时间】:2018-12-20 18:38:33
【问题描述】:

我的构建中有 3 个步骤。如果第三步失败,我需要运行特定的步骤,只有在前一步失败后才能运行。怎么做?

【问题讨论】:

    标签: selenium teamcity


    【解决方案1】:

    看起来没有“在上一步失败时运行”的执行策略。您可以通过使用执行策略“即使之前的某些步骤失败”并让您的特定构建步骤处理逻辑来解决它。

    即如果上一步成功,则什么也不做。如果上一步不成功,做失败案例。

    如果您需要检测上一步是否失败,您可以考虑在构建的一部分中创建一个状态文件(如果存在in_error 文件,则执行您的任务)

    【讨论】:

      【解决方案2】:

      令我惊讶的是,TeamCity 在 2021 年不支持开箱即用。但是 API 为您提供了许多有用的功能,您可以做到

      作为一种解决方案,您需要编写 bash 脚本并在内部调用 TeamCity API

      1. 在 MySettings & Tools 中设置 API 密钥 => 访问令牌
      2. 使用 API 令牌创建环境变量
      3. 使用执行步骤在您的配置中创建一个步骤:即使之前的某些步骤失败
      4. 使用 jq 构建自己的容器或使用任何支持 jq 的现有容器
      5. 放置这个 bash 脚本
          #!/bin/bash
          set -e -x
          
          declare api_response=$(curl -v -H "Authorization: Bearer %env.teamcity_internal_api_key%" -H "Accept: application/json" %teamcity.serverUrl%/app/rest/latest/builds?locator=buildType:%system.teamcity.buildType.id%,running:any,canceled:all,count:2\&fields=build\(id,status\))
          
          declare current_status=`echo ${api_response} | jq '.build[0].status'`
          declare prev_status=`echo ${api_response} | jq '.build[1].status'`
          
          if [ "$current_status" != "$prev_status" ]; then
                  do you code here
          fi
      

      上面代码的一些解释。通过 API 调用,您可以获得当前 buildType 的 2 个最后构建。这是最后一个版本和上一个版本。在您为变量分配状态并在 if 语句中比较它们之后。如果您需要在当前构建失败的情况下运行一些代码,请使用

      if [ "$current_status" = "FAILURE" ]; then
          write your code here
      fi
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-03-24
        • 1970-01-01
        • 1970-01-01
        • 2020-11-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多