在 Debian 上定时执行 Jenkins 任务的常用方式
- 使用 Build periodically(推荐):在任务配置里直接写入 Jenkins Cron 规则,由 Jenkins 调度器触发构建。适合大多数周期性构建、部署、备份等场景。
- 使用 Poll SCM:定时轮询代码仓库,有变更才触发构建,适合希望“代码变更才跑”的流水线。
- 使用 外部系统 Cron + Jenkins API/CLI:在操作系统层面定时调用 Jenkins 的构建接口或 CLI,适合跨系统编排或与外部作业联动。
- 使用 Quiet Period:配合定时触发,设置延迟,避免短时间内频繁触发导致的抖动或冲突。
以上方式均为 Debian 上常见且稳定的做法,可按需组合使用。
方式一 Build periodically 内置调度
- 进入任务配置页,定位到 构建触发器,勾选 Build periodically。
- 在“日程表”写入 Jenkins Cron 规则,字段顺序为:MINUTE HOUR DOM MONTH DOW(5 个字段,非传统 Unix 6 字段)。支持符号:
- *:任意值;M-N:范围;*M-N/X 或 /X:步长;A,B,C:枚举;H:散列,用于在时间窗口内打散触发时间,降低并发峰值。
- 常用示例(均为当地时间,Jenkins 界面可设置时区):
- 每 15 分钟:**H/15 * * * ***
- 每天 02:30:**30 2 * * ***
- 每周六 00:00:H 0 * * 6
- 工作日(周一至周五)09:00:H 9 * * 1-5
- 说明:使用 H 能在指定范围内随机化分钟/小时,避免大量任务在同一时刻启动。短周期(如 H/3)在月末等边界日期需留意实际触发次数与资源占用。
方式二 Poll SCM 轮询代码变更
- 在任务配置的 构建触发器 勾选 Poll SCM,填写类似 Cron 的规则,例如 **H/5 * * * *** 表示每 5 分钟检查一次代码是否有变更。
- 当检测到提交时触发构建;若希望“固定时刻检查”,也可写成 **0 2 * * *** 等。
- 适合 Git/Maven/Gradle 等项目,避免无变更也构建,节省资源。
方式三 外部系统 Cron 调用 Jenkins API 或 CLI
- 前提:
- 开启 安全矩阵/项目级权限,为触发用户生成 API Token。
- 若 Jenkins 启用了 CSRF 保护,需在请求中包含 crumb(或使用 API Token 进行身份验证)。
- 使用 curl 触发示例(系统 Cron 执行):
- 无认证或已放行匿名构建:
- 0 1 * * * /usr/bin/curl -X POST “http://JENKINS_URL/job/YOUR_JOB/build?token=YOUR_TOKEN”
- 基本认证(用户名 + API Token):
- 0 1 * * * /usr/bin/curl -u “USERNAME:API_TOKEN” -X POST “http://JENKINS_URL/job/YOUR_JOB/build?token=YOUR_TOKEN”
- 如需 crumb(示例):先获取 crumb,再在 header 中携带:
- CRUMB=$(curl -u “USERNAME:API_TOKEN” “http://JENKINS_URL/crumbIssuer/api/json” | jq -r ‘.crumb’)
- 0 1 * * * /usr/bin/curl -u “USERNAME:API_TOKEN” -H “Jenkins-Crumb:$CRUMB” -X POST “http://JENKINS_URL/job/YOUR_JOB/build?token=YOUR_TOKEN”
- 使用 CLI(需 jenkins-cli.jar 与 JAVA_HOME):
- 0 1 * * * java -jar /opt/jenkins-cli.jar -s http://JENKINS_URL -auth USERNAME:API_TOKEN build YOUR_JOB
- 适用场景:与备份脚本、外部系统(如数据库作业、监控告警)联动,或在多套 Jenkins 之间统一编排。
实用建议与排错要点
- 统一 时区:在 Manage Jenkins → System → Timezone 设置为 Asia/Shanghai,避免与系统 Cron 时区不一致导致“看起来没按时跑”。
- 避免密集触发:短周期任务使用 H 打散;必要时设置 Quiet Period,让多次触发合并为一次执行。
- 权限与安全:优先使用 API Token 而非明文密码;若使用外部 Cron,务必限制来源 IP、开启 CSRF 保护并使用 crumb。
- 日志与验证:在 系统管理 → 系统日志 与 项目 → 构建历史 核对触发时间与原因;外部 Cron 可在脚本中记录返回码与响应。
- 资源与边界:月末、夏令时切换、节假日等边界情况可能影响触发次数,建议在关键任务上增加 健康检查 与 告警。