Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jenkins生成后任务,如果状态从“更改”;“失败”;至;“成功”;(固定)_Jenkins_Groovy_Post Build - Fatal编程技术网

Jenkins生成后任务,如果状态从“更改”;“失败”;至;“成功”;(固定)

Jenkins生成后任务,如果状态从“更改”;“失败”;至;“成功”;(固定),jenkins,groovy,post-build,Jenkins,Groovy,Post Build,在Jenkins freestyle作业(在较旧的1.6x版本上,不支持2.x管道作业)中,如果生成状态从失败恢复到成功,我希望运行shell命令(curl-XPOST…),作为生成后步骤 但是,所有用于确定我所知道的构建状态的插件只能在当前构建状态为失败或成功时执行操作,但不考虑与上一次构建相比是否恢复 有没有办法实现这一点,例如使用Groovy Post build插件和一些脚本行?与此同时,我找到了实现这一点的方法。它不一定漂亮,我仍然很欣赏其他解决方案:) 首先,需要一个插件,它允许您在

在Jenkins freestyle作业(在较旧的1.6x版本上,不支持2.x管道作业)中,如果生成状态从
失败
恢复到
成功
,我希望运行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”变量在这里有一些不错的文档: