温馨提示×

Debian Jenkins如何配置定时任务

小樊
40
2026-01-03 13:12:57
栏目: 智能运维

Debian 上配置 Jenkins 定时任务的两种方式

  • 方式一:在 Jenkins 项目内使用“构建触发器 → Build periodically”(推荐,简单、稳定,语法为 5 字段 Jenkins cron)。
  • 方式二:在 Debian 系统的 crontab 中用 wget/curl 远程触发 Jenkins 任务(适合外部调度或与系统级任务联动)。

方式一 在 Jenkins 内配置定时构建

  • 进入项目 → 配置 → 构建触发器,勾选 Build periodically
  • 在输入框填写 Jenkins cron 表达式(5 个字段):MINUTE HOUR DOM MONTH DOW。
  • 常用写法与含义(示例均为“分散触发”,避免整点峰值,如需精确时间请写具体数字):
    • 每天 23:000 23 * * *
    • 每天 23 点但分散分钟:H 23 * * *
    • 15 分钟H/15 * * * *
    • 工作日(周一至周五)每 4 小时分散执行:H */4 * * 1-5
    • 每周一 23:000 23 * * 1
    • 每月 1 日 02:000 2 1 * *
  • Pipeline 项目可在 Jenkinsfile 中写入:
    pipeline {
      agent any
      triggers { cron('H 23 * * *') }
      stages { ... }
    }
    
  • 说明与建议:
    • 使用 H(Hash) 能将同类任务在指定窗口内“打散”,避免控制器瞬时并发压力;需要精确整点再用具体数字(如 0 23 * * *)。
    • DOM(每月第几天)与 DOW(星期)同时指定时,Jenkins 按“或”关系触发;如需精确控制,可拆成多行表达式或在脚本内判断日期。
    • 复杂规则(如“每月最后一天”、按指定时区)可用 Extended Timer Trigger 插件或脚本内判断实现。

方式二 在 Debian 的 crontab 中远程触发 Jenkins 任务

  • 前提准备
    • 确保 Jenkins 已安装并运行(如在 Debian 上按官方文档安装)。
    • 确保 cron 服务已安装并运行:sudo systemctl status cron(未运行则 sudo systemctl start cron)。
    • 为任务配置 API Token(用户 → 设置 → API Token),并在 Job 配置中启用“触发远程构建(Build token root URL)”。
  • 基本用法(使用 wget)
    # 每天 01:00 触发
    0 1 * * *  /usr/bin/wget -q -O - "http://JENKINS_URL/job/JOB_NAME/build?token=YOUR_TOKEN" >/dev/null 2>&1
    
  • 使用 curl(更便于处理 CSRF)
    • 获取 crumb(跨站请求伪造令牌):
      CRUMB=$(curl -u "USER:API_TOKEN" -s 'http://JENKINS_URL/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)')
      
    • 触发构建(带上 crumb 头):
      curl -u "USER:API_TOKEN" -H "$CRUMB" -X POST "http://JENKINS_URL/job/JOB_NAME/build?token=YOUR_TOKEN"
      
    • 如需定时执行,将上述命令放入 crontab -e 的定时行中(例如 0 1 * * *)。
  • 安全与网络建议
    • 尽量使用 API Token + crumb 的方式;若 Jenkins 启用了 CSRF 保护,未带 crumb 的请求会被拒绝。
    • 建议通过 Nginx/Apache 反向代理 + HTTPS 访问 Jenkins,避免在公网以明文方式暴露触发接口。

常见问题与排查

  • 表达式不生效:确认项目已保存并启用定时;检查 Jenkins 系统时间与时区是否正确(Jenkins 默认使用控制器系统时区)。
  • 整点拥堵:将 0 0 * * * 改为 H H * * *H(0-29) 2 * * * 等“分散窗口”写法。
  • DOM 与 DOW 冲突:两者同时写表示“任一满足即触发”,如需精确控制请拆分多行或在脚本内判断。
  • 31 日问题:如 H/3 在月末可能跨月失效,尽量将日期限制在 1–28 或使用脚本判断月末。
  • 远程触发 403/404:检查 Job 名称Tokencrumb 是否正确;确认 CSRF 配置与网络连通性。

0