4. Jenkins构建触发器之远程触发

任务目标

为 Jenkins 任务配置远程构建触发器令牌,使用 curl 命令模拟远程调用触发构建,并通过构建历史记录验证触发是否成功。

前置条件

  • Jenkins 服务已安装并运行(本案例以 http://localhost:8080 为例)
  • 已创建名为 remote-trigger-demo 的自由风格任务
  • Jenkins 已安装 HTTP Request 插件(用于远程触发,Jenkins 2.x 默认支持)

实现步骤

1. 配置远程触发令牌

进入 Jenkins → 任务 remote-trigger-demo → 配置 → 构建触发器 区域,勾选 触发远程构建(例如,使用脚本),在令牌框中填入自定义令牌,例如:

my-secret--2024

保存配置。Jenkins 会生成一个远程触发 URL,格式为:

http://localhost:8080/job/remote-trigger-demo/build?=my-secret--2024

2. 使用 curl 触发构建

打开终端,执行以下命令模拟远程调用:

curl -I -X POST "http://localhost:8080/job/remote-trigger-demo/build?=my-secret--2024"

若 Jenkins 配置了 CSRF 防护(默认开启),需在请求中携带 API 或使用用户名/密码认证:

curl -I -u "your-username:your-api-" -X POST "http://localhost:8080/job/remote-trigger-demo/build?=my-secret--2024"
说明:API 在 Jenkins → 用户 → 设置 → API 中生成。若未开启 CSRF 防护,可省略 -u 参数。

3. 验证构建是否触发

触发后,通过以下方式确认构建是否成功启动:

  • HTTP 响应码:curl 命令返回 201 Created 表示触发成功;返回 403 表示令牌错误或 CSRF 防护拦截。
  • Jenkins 界面:进入任务页面,查看 构建历史 区域是否出现新的构建记录(#1、#2 等)。
  • 控制台输出:点击最新构建号 → 控制台输出,确认构建执行成功(若任务未配置构建步骤,则显示“Finished: SUCCESS”)。

完整代码示例

以下为远程触发的最小可复现示例,包含一个简单的构建步骤(打印时间戳):

// Jenkins 任务配置(自由风格)
// 构建步骤:添加“执行 shell”
// Shell 命令内容:
echo "Remote trigger build started at: $(date)"
echo "Build ID: ${BUILD_ID}"
echo "Triggered by: ${BUILD_USER_ID:-anonymous}"

触发命令(Linux/macOS):

# 无 CSRF 防护时
curl -I -X POST "http://localhost:8080/job/remote-trigger-demo/build?=my-secret--2024"

# 有 CSRF 防护时(推荐)
curl -I -u "admin:your-api-" -X POST "http://localhost:8080/job/remote-trigger-demo/build?=my-secret--2024"

验证判定标准

检查项通过条件
curl 响应码返回 201 Created 或 200 OK
构建历史任务页面出现新的构建记录,编号递增
控制台输出显示 shell 命令执行结果,包含时间戳和 Build ID

常见问题

  • 403 Forbidden:令牌错误或 CSRF 防护未通过。检查令牌是否与配置一致,并添加 -u 认证参数。
  • 404 Not Found:任务名称错误或 Jenkins URL 不正确。确认任务名为 remote-trigger-demo,URL 路径正确。
  • 触发成功但无构建记录:检查任务是否被禁用,或构建队列被阻塞(如并发构建数已达上限)。

通过以上步骤,即可完成 Jenkins 远程触发构建的配置与验证。该机制适用于自动化脚本、外部系统集成或 CI/CD 流水线中跨 Jenkins 实例的调用场景。