在 jenkins 中使用 curl 命令调用作业时,如何使 parent 作业等待 child 作业的状态?
How to make parent job to wait for child job's status when calling it using curl command in jenkins?
我正在使用
在 parent 作业的 while 循环中调用 child 作业
curl -u username:password JENKINS_URL/job/job_name/build?token=TOKEN_NAME
或
curl -u username:password JENKINS_URL/job/job_name/buildWithParameters?token=TOKEN_NAME
如果我 运行 循环两次,child 作业将被调用两次,但我希望 parent 作业等到 child 作业 运行ning 并且每次都给出最终的 success/failure 状态。 MultiJob 插件不允许我 运行 通过循环。我的 parent 作业也应该因 child 失败而失败。请建议我正确的方法。
上述作业有两种可能的解决方案:-
1. 管道插件
2. 编写一个简单的代码,每隔几秒轮询一次子作业状态。例如
JOB_STATUS_URL_XML="http://jenkins_url/job/job_name/lastBuild/api/xml?depth=1"
result="true"
# Calling a job
curl -u "username:password" "http://jenkins_url/job/job_name/buildWithParameters?token=token_name&parm_1=$value"
# Poll every thirty seconds until the job is finished
while [ "$result" == "true" ]
do
sleep 30
# Grep will return build status (true if build is still running)
result=$(curl --user username:password --silent $JOB_STATUS_URL_XML | grep -oP '(?).*(?=>/building)')
done
# Grep the result status
JOB_STATUS=$(curl --user username:password --silent $JOB_STATUS_URL_XML | grep -oP '(?).*(?=>/result)')
echo $JOB_STATUS
我正在使用
在 parent 作业的 while 循环中调用 child 作业curl -u username:password JENKINS_URL/job/job_name/build?token=TOKEN_NAME
或
curl -u username:password JENKINS_URL/job/job_name/buildWithParameters?token=TOKEN_NAME
如果我 运行 循环两次,child 作业将被调用两次,但我希望 parent 作业等到 child 作业 运行ning 并且每次都给出最终的 success/failure 状态。 MultiJob 插件不允许我 运行 通过循环。我的 parent 作业也应该因 child 失败而失败。请建议我正确的方法。
上述作业有两种可能的解决方案:-
1. 管道插件
2. 编写一个简单的代码,每隔几秒轮询一次子作业状态。例如
JOB_STATUS_URL_XML="http://jenkins_url/job/job_name/lastBuild/api/xml?depth=1"
result="true"
# Calling a job
curl -u "username:password" "http://jenkins_url/job/job_name/buildWithParameters?token=token_name&parm_1=$value"
# Poll every thirty seconds until the job is finished
while [ "$result" == "true" ]
do
sleep 30
# Grep will return build status (true if build is still running)
result=$(curl --user username:password --silent $JOB_STATUS_URL_XML | grep -oP '(?).*(?=>/building)')
done
# Grep the result status
JOB_STATUS=$(curl --user username:password --silent $JOB_STATUS_URL_XML | grep -oP '(?).*(?=>/result)')
echo $JOB_STATUS