Jenkins在Ubuntu中的任务调度实践
一 常用调度方式与适用场景
- 内置定时触发 Cron:在任务的“构建触发器”中使用“Build periodically”,适合固定周期(如每日构建、每周回归)。语法为标准的 Cron 表达式。
- 外部定时触发 crontab → Jenkins API:在 Ubuntu 上用 crontab 定时调用 Jenkins 的 Remote API 触发构建,适合与系统级维护窗口、外部编排工具集成。
- 延迟与安静期 Quiet Period:在 Pipeline 或全局设置里配置 quietPeriod,用于避免构建风暴、错峰触发。
- 事件驱动触发:如 GitHub/GitLab Webhook 或 Generic Webhook Trigger,适合代码推送即构建、合并请求验证等场景。
- 分布式执行:将任务调度到 Ubuntu Agent/Slave 节点执行,适合需要特定操作系统或资源的作业。
二 内置定时触发 Cron
- 在 Jenkins 任务配置中勾选“Build periodically”,填写 Cron 表达式(五字段:分 时 日 月 周)。例如:
- 每天 09:00 构建:
0 9 * * *
- 工作日每 2 小时构建:
0 */2 * * 1-5
- 每 15 分钟构建:
H/15 * * * *(使用 H 有助于分散负载)
- 注意:Jenkins 的“构建历史”会按每次触发记录,合理设置“丢弃旧的构建”以控制磁盘占用。
三 外部定时触发 crontab 调用 Jenkins API
- 思路:在 Ubuntu 上用 crontab 定时执行 curl 请求,调用 Jenkins 的远程构建接口。
- 示例(无参数构建):
# 每天 02:30 触发
30 2 * * * curl -X POST http://JENKINS_URL/job/JOB_NAME/build --user USER:API_TOKEN
- 示例(带参数构建,使用 CSRF 防护的 crumb):
# 先获取 crumb(Jenkins 2.176+ 默认启用 CSRF)
CRUMB=$(curl -s 'http://JENKINS_URL/crumbIssuer/api/json' \
--user USER:API_TOKEN | jq -r '.crumb')
# 触发构建并传参
0 3 * * * curl -X POST http://JENKINS_URL/job/JOB_NAME/buildWithParameters \
--user USER:API_TOKEN \
-H "Jenkins-Crumb:$CRUMB" \
--data-urlencode json='{"parameter": [{"name":"ENV","value":"prod"}]}'
- 建议:为安全起见使用 API Token 而非明文密码;如 Jenkins 前置 Nginx/Apache,确保代理转发头部正确(特别是 X-Forwarded-For/Host)。
四 延迟与安静期 Quiet Period
五 事件驱动与分布式执行
- 事件驱动:
- 在代码托管平台配置 Webhook,Jenkins 安装 GitHub/GitLab 或 Generic Webhook Trigger 插件即可在推送、合并请求等事件发生时自动触发。
- 示例:Generic Webhook Trigger 可在 Jenkins 中解析 JSON 事件并提取分支、提交等信息,按需触发对应 Pipeline。
- 分布式执行:
- 在 Manage Jenkins → Nodes 配置 Ubuntu Agent(标签如 ubuntu),在任务“Restrict where this project can be run”中指定标签,即可将构建调度到 Ubuntu 节点。
- 适合需要 Linux 工具链、特定 内核/架构 或访问内网资源的作业。