Jenkins生成后任务,如果状态从“更改”;“失败”;至;“成功”;(固定)
在Jenkins freestyle作业(在较旧的1.6x版本上,不支持2.x管道作业)中,如果生成状态从Jenkins生成后任务,如果状态从“更改”;“失败”;至;“成功”;(固定),jenkins,groovy,post-build,Jenkins,Groovy,Post Build,在Jenkins freestyle作业(在较旧的1.6x版本上,不支持2.x管道作业)中,如果生成状态从失败恢复到成功,我希望运行shell命令(curl-XPOST…),作为生成后步骤 但是,所有用于确定我所知道的构建状态的插件只能在当前构建状态为失败或成功时执行操作,但不考虑与上一次构建相比是否恢复 有没有办法实现这一点,例如使用Groovy Post build插件和一些脚本行?与此同时,我找到了实现这一点的方法。它不一定漂亮,我仍然很欣赏其他解决方案:) 首先,需要一个插件,它允许您在
失败
恢复到成功
,我希望运行shell命令(curl-XPOST…
),作为生成后步骤
但是,所有用于确定我所知道的构建状态的插件只能在当前构建状态为失败
或成功
时执行操作,但不考虑与上一次构建相比是否恢复
有没有办法实现这一点,例如使用
Groovy Post build
插件和一些脚本行?与此同时,我找到了实现这一点的方法。它不一定漂亮,我仍然很欣赏其他解决方案:)
首先,需要一个插件,它允许您在后期构建步骤中执行shell命令。可能会有不同的,我用它
然后,创建一个“执行一组脚本”生成后步骤,将要执行的步骤设置为buildstep
,然后选择executeshell
,对我来说,这看起来像这样:
在这里,我运行以下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可能需要身份验证。与此同时,我找到了一种实现这一点的方法。它不一定漂亮,我仍然很欣赏其他解决方案:) 首先,需要一个插件,它允许您在后期构建步骤中执行shell命令。可能会有不同的,我用它 然后,创建一个“执行一组脚本”生成后步骤,将要执行的步骤设置为
buildstep
,然后选择executeshell
,对我来说,这看起来像这样:
在这里,我运行以下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可能需要身份验证。我发现这样做是一种很好的方法。 您可以建立一些有趣的逻辑,“currentBuild”变量在这里有一些不错的文档:
我发现这是一个很好的方法。 您可以建立一些有趣的逻辑,“currentBuild”变量在这里有一些不错的文档: