我们正在使用 TeamCity 7,想知道是否只有在前一个步骤失败的情况下才能运行一个步骤?我们在构建步骤配置中的选项使您可以选择仅在所有步骤都成功(即使步骤失败)时执行,或者始终运行它。
是否只有在前一个步骤失败时才执行步骤?
我们正在使用 TeamCity 7,想知道是否只有在前一个步骤失败的情况下才能运行一个步骤?我们在构建步骤配置中的选项使您可以选择仅在所有步骤都成功(即使步骤失败)时执行,或者始终运行它。
是否只有在前一个步骤失败时才执行步骤?
Theres no way to setup a step to execute only if a previous one failed.
The closest I've seen to this, is to setup a build that has a "Finish Build" trigger that would always execute after your first build finishes. (Regardless of success or failure).
Then in that second build, you could use the TeamCity REST API to determine if the last execution from the first build was successful or not. If it wasn't successful then you could whatever it is you want to do.
另一个解决方案是 Webhooks。
如果构建失败,此插件也可以将 webhook 发送到 URL。在 webhook 端,您可以处理一些操作,例如,发送通知。
我很惊讶 TeamCity 在 2021 年不支持开箱即用。但是 API 为您提供了许多有用的功能,您可以做到
作为解决方案,您需要编写 bash 脚本并在内部调用 TeamCity API
#!/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