CentOS 上 Jenkins 构建触发器配置指南
一 前置准备
- 确保 Jenkins 已安装并运行,且可通过 CentOS 防火墙访问(如开放 8080 端口)。如使用反向代理或自签名证书,注意外网 Webhook 的可达性与证书信任。
- 安装常用插件:Git plugin、GitHub plugin、GitLab plugin、Gitee plugin(按需安装,用于代码拉取与 Webhook 事件)。
- 源码管理建议使用 SSH 方式拉取代码:在 Jenkins 凭据中配置 SSH 私钥,并在任务中选用对应 Credentials;如需免密执行远程命令,可在 Jenkins 主机为 jenkins 用户配置 SSH 免密登录目标机器(如使用
ssh-copy-id)。
二 内置触发器配置
- 触发远程构建
- 在任务配置 Build Triggers 勾选 Trigger builds remotely (e.g., from scripts),设置 Authentication Token(如:TOKEN_NAME)。
- 触发 URL:
JENKINS_URL/job/<项目名>/build?token=TOKEN_NAME;如为参数化任务使用:/buildWithParameters?token=TOKEN_NAME。
- 示例:
http://192.168.1.20:8080/job/demo/build?token=remote-build,用浏览器或脚本 curl 访问即可触发构建。
- 其他工程构建后触发
- 勾选 Build after other projects are built,填写上游 项目名称(支持多个,逗号分隔),可设置触发条件(如仅 SUCCESS 时触发)。
- 适用于 A 构建完成后自动触发 B 的场景。
- 定时构建(Build periodically)
- 勾选 Build periodically,填写 Cron 表达式(5 字段:分 时 日 月 周;可用 H 做时间散列,避免同一时刻并发)。
- 示例:
- 每 30 分钟:
H/30 * * * *
- 工作日 9:00–17:00 每 2 小时:
H H(9-16)/2 * * 1-5
- 每天 02:00:
H 2 * * *
- 轮询 SCM(Poll SCM)
- 勾选 Poll SCM,填写 Cron 表达式定时检查代码变更(如
H/5 * * * * 每 5 分钟检查一次)。
- 注意:轮询会定时扫描仓库,可能带来 系统开销,优先使用 Webhook 事件驱动。
三 代码托管平台 Webhook 配置
- GitLab
- 在 Jenkins 项目启用 GitLab triggers(安装 GitLab 插件后可见),复制 Webhook URL 与 Secret Token。
- 在 GitLab 管理后台进入 Admin Area → Settings → Network,勾选 Allow requests to the local network from webhooks and integrations(允许来自 Webhooks 的对本地网络请求)。
- 进入项目 Settings → Webhooks,填写 URL 与 Secret,选择触发事件(如 Push events、Merge Request events),点击 Test 发送测试事件并验证。
- Gitee
- 在 Jenkins 项目勾选 Enabled Gitee triggers,按需选择 Push Events、Opened/Updated/Accepted Merge Request Events 等,并可设置 Secret Token for Gitee WebHook。
- 在 Gitee 项目 → 设置 → WebHooks 添加 Webhook,填写 URL 与 密码/Secret,选择事件并测试。
- GitHub
- 在 GitHub 项目 → Settings → Webhooks → Add webhook 添加 Payload URL(Jenkins 生成的 Webhook URL),选择 Content type(如
application/json),勾选事件(如 Push、Pull request)。
- 在 Jenkins → Manage Jenkins → System → GitHub → Add GitHub Server 配置 Personal Access Token,测试连接后使用。
- 若 Jenkins 在内网导致 GitHub 无法直连,可使用 内网穿透/反向代理或改用 轮询 SCM 作为备选。
四 Pipeline 项目写法示例
- 定时触发
- 在
Jenkinsfile 中使用 triggers { cron('H/15 * * * *') } 实现每 15 分钟触发一次。
- 上游任务触发
- 使用
triggers { upstream('jobA,jobB', threshold: hudson.model.Result.SUCCESS) },当 jobA 或 jobB 构建结果为 SUCCESS 时触发当前任务。
五 常见问题与排查
- Webhook 返回 302 或无法触发
- 检查 CSRF 保护与 匿名读/构建权限;新版 Jenkins 可能需要为 Webhook 配置 CSRF 豁免或使用 API Token;确保 Jenkins URL 与 Webhook 回调地址一致(协议、端口、路径)。
- 内网 Jenkins 无法被 GitHub/GitLab 访问
- 使用 内网穿透(如 ngrok)、反向代理或临时改用 Poll SCM;注意 HTTPS 证书与 代理白名单配置。
- 轮询开销大
- 优先使用 Webhook 事件驱动(Push、Merge Request 等),减少无效扫描与构建堆积。
- SSH 免密与权限
- 若构建步骤包含
ssh root@HOST 等命令,确保 jenkins 用户已对目标主机 免密登录;必要时在 Jenkins 节点配置 SSH Agent 与凭据。