在Jenkins自由式作业中(在较旧的1.6x版本上,不支持2.x管道作业)如果构建状态恢复,我想运行shell命令(curl -XPOST ...
)作为后期构建步骤(!)从FAILED
到SUCCESS
。
但是,用于确定我所知的构建状态的所有插件只能在当前构建状态为FAILED
或SUCCESS
时执行,但不考虑是否已恢复与上一次构建比较。
有没有办法如何实现这一目标,例如:使用Groovy Post build
插件和一些脚本编写?
答案 0 :(得分:1)
与此同时,我找到了实现这一目标的方法。它不一定漂亮,我仍然欣赏替代解决方案:)
首先,需要一个插件,它允许您在Post Build步骤中执行shell命令。可能有不同的,我正在使用the PostBuildScript plugin。
然后,在构建步骤后创建一个“执行一组脚本”,将步骤设置为Build step
并选择Execute shell
,对我来说这看起来像这样:
在那里,我运行以下shell脚本行,它们使用我的Jenkins服务器的REST API和Python one-liner(你也可以使用jq
或其他东西)来确定当前构建以及最后完成的构建:
statusOfCurrentBuild=$(curl --silent "${BUILD_URL}api/json" | python -c "import sys, json; print json.load(sys.stdin)['result']")
statusOfLastBuild=$(curl --silent "${JOB_URL}/lastCompletedBuild/api/json" | python -c "import sys, json; print json.load(sys.stdin)['result']")
if [ "${statusOfCurrentBuild}" == "SUCCESS" ] && [ "${statusOfLastBuild}" == "FAILURE" ]
then
echo "Build was fixed"
# do something interesting here
fi
根据您的Jenkins设置,使用REST API可能需要进行身份验证。
答案 1 :(得分:1)
我发现类似的东西是一个不错的选择。 您可以建立一些有趣的逻辑,“ currentBuild”变量在此处具有一些不错的文档:currentBuild variable doc
script {
if ( ( currentBuild.resultIsBetterOrEqualTo("SUCCESS") && currentBuild.previousBuild.resultIsWorseOrEqualTo("UNSTABLE") ) || currentBuild.resultIsWorseOrEqualTo("UNSTABLE")) {
echo "If current build is good, and last build is bad, or current build is bad"
}
}