Jenkins在Linux上的任务调度实践
一 内置定时调度 Build periodically 与 Poll SCM
- 在Freestyle任务中,进入构建触发器,勾选Build periodically或Poll SCM,使用Cron表达式定义频率。Jenkins 的 Cron 为5个字段(分 时 日 月 周),支持特殊字符H(哈希,用于把任务在指定范围内打散,避免“峰值集中”)。示例:H/15 * * * *** 表示每隔15分钟执行一次;H 2 * * *** 表示每天02:00左右执行。
- 在Pipeline任务中,使用 triggers 定义:
pipeline {
agent any
triggers { cron(‘H 10 * * 1-5’) } // 每周一至周五10:00左右执行
stages {
stage(‘Build’) { steps { echo ‘Building…’ } }
}
}
- 适用场景:纯时间驱动(Build periodically);代码变更驱动(Poll SCM,按代码仓库轮询变更触发构建)。
二 外部触发与事件驱动 Webhook 与远程命令
- Webhook 触发:安装如Generic WebHook Trigger等插件,在任务中启用并配置URL/Token;当外部系统(如Git仓库)推送事件到达时,自动触发构建。适合与代码托管平台联动,做到“代码推送即构建”。
- 远程命令执行:通过SSH 插件在构建步骤中执行远程主机命令,实现跨机编排(如部署、清理、备份),与定时/触发方式组合使用,构建完整的 CI/CD 流程。
三 系统级 Cron 调用 Jenkins API 触发构建
- 适用场景:不依赖 Jenkins 内部调度、由操作系统层面统一纳管;或需要以特定系统账户触发构建。
- 步骤:
- 确保 Jenkins 服务运行:
sudo systemctl status jenkins
sudo systemctl start jenkins
- 编辑当前用户的计划任务:
crontab -e
如需以 root 身份:sudo crontab -e
- 添加条目(示例为每天02:00触发某任务):
0 2 * * * /usr/bin/curl -X POST http://your-jenkins-url/job/your-job-name/build
如需认证,可在 curl 中加入**–user user:token或使用API Token**。
- 验证与排错:
crontab -l 查看任务;
tail -f /var/log/jenkins/jenkins.log 查看 Jenkins 日志;
必要时检查系统日志(如 /var/log/cron)。
四 Cron 表达式速查与示例
- 字段顺序:分 时 日 月 周(5字段);常用字符:*(任意)、M-N(范围)、*/X 或 M-N/X(步长)、A,B,C(枚举)、H(散列)。
- 示例:
- 每15分钟:**H/15 * * * ***
- 每天02:00:**H 2 * * ***
- 工作日(周一至周五)10:00:H 10 * * 1-5
- 工作日09:00–17:00每2小时:H H(0-7)/2 * * 1-5
- 提示:在 Jenkins 中使用H能更均匀地分布触发时间,降低并发压力。
五 实践建议与排错要点
- 优先使用内置调度管理周期性任务;事件驱动(如Webhook)用于“代码变更即构建”;系统级Cron适合统一运维视角或外部系统集成。
- 为安全触发构建,建议使用API Token或CSRF 保护配合 Webhook;必要时在系统 Cron 中使用**–user与凭据**。
- 排错路径:
- 查看任务面板的构建历史与控制台输出;
- 检查系统 Cron 日志(如 /var/log/cron)与 Jenkins 日志(如 /var/log/jenkins/jenkins.log);
- 确认Jenkins URL、网络连通性、权限/代理配置正确。