需要将其中的 "your-jenkins-url.com"、"your-jenkins-username"、"your-jenkins-token"、"your-job-name"和"PARAM1=value1&PARAM2=value2" 根据实际情况进行替换。另外,这个示例脚本也做了一些暂停等待的操作以确保能够获取到输出信息。
#!/bin/bash
# Jenkins登录信息
jenkins_url="http://your-jenkins-url.com"
jenkins_user="your-jenkins-username"
jenkins_token="your-jenkins-token"
# Job名称及参数(如果有)
job_name="your-job-name"
job_params="PARAM1=value1&PARAM2=value2"
# 调用Jenkins API执行Job并获取构建号
queue_location=$(curl -sSL \
-D - \
-u "${jenkins_user}:${jenkins_token}" \
-X POST \
-H "Content-Type: application/x-www-form-urlencoded" \
"${jenkins_url}/job/${job_name}/buildWithParameters?${job_params}" \
| grep 'Location:' | sed 's/Location: //')
queue_item_number=$(echo "${queue_location%/}" | awk -F "/" '{print $(NF)}')
# 获取执行队列状态,如果还在等待中则等待,否则获取构建号
while true
do
queue_info=$(curl -su "${jenkins_user}:${jenkins_token}" \
"${jenkins_url}/queue/item/${queue_item_number}/api/json")
if [ "$(echo $queue_info | jq -r '.executable')" != null ]
then
build_number=$(echo $queue_info | jq -r '.executable.number')
break
fi
sleep 1
done
# 等待一段时间直到构建开始
sleep 10
# 获取构建的状态
build_status=$(curl -sSL \
-u "${jenkins_user}:${jenkins_token}" \
"${jenkins_url}/job/${job_name}/${build_number}/api/json" \
| jq '.building')
# 等待构建完成
while [ "${build_status}" == "true" ]
do
sleep 5
build_status=$(curl -sSL \
-u "${jenkins_user}:${jenkins_token}" \
"${jenkins_url}/job/${job_name}/${build_number}/api/json" \
| jq '.building')
done
# 获取Job控制台输出
curl -sSL \
-u "${jenkins_user}:${jenkins_token}" \
"${jenkins_url}/job/${job_name}/${build_number}/consoleText"