本文介绍通过脚本的方式触发 Jenkins Job 执行,注意事项主要是分清楚两个 Token 为 Authentication Token 和 API Token,并在脚本中对携带用户认证信息。
如果你需要从 SCM(Github、Gitlab、Bitbucket 等)自动触发,可以考虑使用 Generic Webhook Trigger,可以参考这篇:提交代码自动触发 Jenkins 构建(Github、Gitlab、Bitbucket)
或者使用特定的 SCM 插件如 Gitlab Plugin,提供了 “Build when a change is pushed to GitLab” 选项。
启用 Trigger builds remotely (e.g., from scripts)
填入随机值作为 Job 的 Authentication Token
生成用户的 API Token
位置在 “用户” - “Configure” - “API Token”,新增一个用户 Token
名称填写描述 Token 用户的信息即可,生成的 API Token 保存好,刷新页面后将不再可见。
Jenkins Job 触发地址
需要注意的是,Jenkins 页面上提示的 token=TOKEN_NAME 很不准确,此处的 TOKEN_NAME 指代第一步配置的 Authentication Token,这也是记录本文的原动力,又一次误导我
# 不携带参数
JENKINS_URL/job/diamond/job/develop/job/test-trigger-build/build?token=TOKEN_NAME
# 携带参数
JENKINS_URL/job/diamond/job/develop/job/test-trigger-build/buildWithParameters?token=TOKEN_NAME
替换参数后,在浏览器打开即可触发构建。
使用 buildWithParameters 时,自定义参数可以通过 ¶m1=value1¶ms2=value2 补充到路径后进行传递
通过脚本触发
注意替换变量值
Python3 脚本
import requests
JOB_AUTH_TOKEN = "YT7ivRT2GwcDxCfN"
JENKINS_USERNAME = "<your-jenkins-user-name>" # 在用户页面的 URL 路径上可以看到
JENKINS_USER_API_TOKEN = "11d9732***********2f3212" # 第二步生成的 API Token
jenkins_url = f"https://<your-jenkins-host>/job/<your-jobname>/build?token={JOB_AUTH_TOKEN}"
auth = (JENKINS_USERNAME, JENKINS_USER_API_TOKEN) # Jenkins用户名和API Token
print(jenkins_url)
response = requests.get(jenkins_url, auth=auth)
if response.status_code == 201:
print("Jenkins build triggered successfully")
else:
print("Failed to trigger Jenkins build. Status code:", response.status_code)
Bash 脚本
JOB_AUTH_TOKEN="YT7ivRT2GwcDxCfN"
JENKINS_USERNAME="<your-jenkins-user-name>"
JENKINS_USER_API_TOKEN="11d9732***********2f3212"
JENKINS_HOST="<your-jenkins-host>"
JOB_NAME="<your-jobname>"
curl -u "$JENKINS_USERNAME:$JENKINS_USER_API_TOKEN" -X GET "https://$JENKINS_HOST/job/$JOB_NAME/build?token=$JOB_AUTH_TOKEN"
Bash 脚本(循环)
#!/bin/bash
JOB_AUTH_TOKEN="YT7ivRT2GwcDxCfN"
JENKINS_USERNAME="<your-jenkins-user-name>"
JENKINS_USER_API_TOKEN="11d9732***********2f3212"
JENKINS_HOST="<your-jenkins-host>"
JOB_NAME="<your-jobname>"
# Jenkins URL模板
BASE_URL="$JENKINS_HOST/job/$JOB_NAME/buildWithParameters?token=$JOB_AUTH_TOKEN"
# 其他固定参数
FIXED_PARAMS="&code_version=1.5.41&replicas=retain&cpu_request=retain&cpu_limit=retain&mem_request=retain&mem_limit=retain"
# 服务名称列表
service_names=("app1" "app2")
# 循环调用并替换 service_name
for service_name in "${service_names[@]}"
do
# 构建完整的URL
URL="${BASE_URL}&service_name=${service_name}${FIXED_PARAMS}"
# 调用 Jenkins 构建 URL
echo "Calling: $service_name"
echo "Calling: $URL"
curl -u "$JENKINS_USERNAME:$JENKINS_USER_API_TOKEN" -X GET "$URL"
# 等待 30 秒
sleep 30
done