我们正在使用TeamCity 7,并想知道只有在前一个失败后才能进行步骤运行?我们在构建步骤配置中的选项使您可以选择仅在所有步骤都成功时执行,即使步骤失败,也可以始终运行它。
是否有办法只在前一个步骤失败时才执行步骤?
答案 0 :(得分:7)
如果前一个失败,则无法设置执行步骤。
我最接近的是设置一个具有“Finish Build”触发器的构建,该触发器将在第一次构建完成后始终执行。 (无论成功与否)。
然后在第二个构建中,您可以使用TeamCity REST API来确定第一个构建的最后一次执行是否成功。如果它不成功那么你可以做任何你想做的事。
答案 1 :(得分:1)
作为解决方法,可以通过仅在成功后才能运行的命令行步骤来设置变量,以后可以进行检查。
echo "##teamcity[setParameter name='env.BUILD_STATUS' value='SUCCESS']"
然后可以在PowerShell步骤中查询该步骤,即使步骤失败,该步骤也可以运行。
if($env:BUILD_STATUS -ne "SUCCESS"){
}
答案 2 :(得分:0)
另一个解决方案是Webhooks。
如果构建也失败,此plugin可以将webhook发送到URL。 在Webhook端,您可以处理一些操作,例如,发送通知。
答案 3 :(得分:0)
我很惊讶 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