温馨提示×

Debian Jenkins任务如何定时执行

小樊
36
2025-11-15 07:29:30
栏目: 智能运维

在 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:00H 0 * * 6
    • 工作日(周一至周五)09:00H 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 可在脚本中记录返回码与响应。
  • 资源与边界:月末、夏令时切换、节假日等边界情况可能影响触发次数,建议在关键任务上增加 健康检查告警

0