仅在上一步失败时才在TeamCity中执行步骤

时间:2018-07-12 13:40:13

标签: selenium teamcity

我的构建过程分为3个步骤。如果第三步失败,则需要运行特定步骤,该步骤仅在上一步失败后才能运行。怎么做?

2 个答案:

答案 0 :(得分:1)

似乎没有执行策略可以“在上一步失败时运行”。您可以通过执行策略“即使先前的某些步骤失败了”,并由您的特定构建步骤来处理逻辑,来解决此问题。

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

如果您需要检测上一步是否失败,可以考虑将一部分内容创建状态文件(如果存在TABLE ClassB(attr_A VARCHAR, attr_B VARCHAR) 文件,请执行任务)

答案 1 :(得分:0)

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

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

  1. 在“我的设置和工具”中设置 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