如果状态从"失败"成功"成功" (固定)

时间:2018-02-16 10:04:35

标签: jenkins groovy post-build

在Jenkins自由式作业中(在较旧的1.6x版本上,不支持2.x管道作业)如果构建状态恢复,我想运行shell命令(curl -XPOST ...)作为后期构建步骤(!)从FAILEDSUCCESS

但是,用于确定我所知的构建状态的所有插件只能在当前构建状态为FAILEDSUCCESS时执行,但不考虑是否已恢复与上一次构建比较。

有没有办法如何实现这一目标,例如:使用Groovy Post build插件和一些脚本编写?

2 个答案:

答案 0 :(得分:1)

与此同时,我找到了实现这一目标的方法。它不一定漂亮,我仍然欣赏替代解决方案:)

首先,需要一个插件,它允许您在Post Build步骤中执行shell命令。可能有不同的,我正在使用the PostBuildScript plugin

然后,在构建步骤后创建一个“执行一组脚本”,将步骤设置为Build step并选择Execute shell,对我来说这看起来像这样: Jenkins post build step

在那里,我运行以下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"
       }
    }