2017-10-06 73 views
0

我打电话使用如何让父作业在jenkins中使用curl命令调用时等待子作业的状态?

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 

如果我运行一个循环两次在父母工作的同时,环子作业,孩子的作业将被调用两次,但我想父母的工作等到小孩工作正在运行并且每次都给出最终的成功/失败状态。 MultiJob插件不允许我运行循环。我父母的工作也应该因失败而失败。请给我正确的方法。

回答

0

有对上述工作的两个可能的解决方案: -
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