有没有办法在Post Build shell脚本中获取变量中Jenkins作业的状态。 我想打印出如下信息。
"Build Status is $BUILD_URL :: $BUILD_STATUS"
($ BUILD_STATUS是当前已完成构建的状态,例如:ABORTED,SUCCESS,FAILURE)
答案 0 :(得分:6)
就我而言,我必须在这里包含API TOKEN才对我有用:
BUILD_STATUS=$(curl --user USER:TOKEN_VALUE --silent $BUILD_URLapi/json | jq -r '.result')
对我来说是:
BUILD_STATUS=$(curl --user robert:valueofmysecrettoken --silent $BUILD_URLapi/json | jq -r '.result')
答案 1 :(得分:5)
如果你可以调用python脚本作为后期构建步骤,你可以尝试这样的事情:
import os, sys, json, codecs, urllib2
def main():
url = "http://localhost:8080/job/jobName/lastBuild/api/json"
try:
fRead = urllib2.urlopen(url, None, 30); # 30 second timeout
except:
raise
jsonResponse = json.loads(fRead.read());
fRead.close();
jobStatus = jsonResponse["result"]
main();
我已经在我的Jenkins上测试了网址并且它有效,但我没有测试过脚本本身,所以请小心。显然,请根据需要替换端口号和jobName。
答案 2 :(得分:5)
与user3352495的答案相同,但不使用任何python依赖项。
我正在使用jenkins自己的API来获取作业运行时的构建状态,这就像一个魅力。请注意,我正在使用JQ来解析json响应。
要使其工作,只需添加一个shell脚本并执行以下命令:BUILD_STATUS=$(curl --silent ${BUILD_URL}api/json | jq -r '.result')
结果如下:
答案 3 :(得分:2)
我知道这个问题已经过时,但是我可以使用currentBuild变量,例如:
post {
always {
emailext body: "See ${BUILD_URL}", recipientProviders: [requestor()], subject: "Jenkins: ${JOB_NAME}: Build status is ${currentBuild.currentResult}"
}
}