Jenkins 的任务调度主要围绕 Job(任务)触发机制 展开,核心是通过配置 构建触发条件 实现自动化执行(如定时、事件触发、依赖触发等)。以下是 Jenkins 任务调度的完整解析,包括核心机制、配置方式、高级场景及最佳实践。
Jenkins 任务的调度本质是定义任务何时执行,主要触发方式分为以下几类:
| 触发类型 | 说明 |
|---|---|
| 定时触发(Cron) | 类似 Linux crontab,按固定时间/周期执行任务(如每天凌晨构建)。 |
| 事件触发 | 由外部事件触发(如 Git 代码提交、GitHub/GitLab Webhook、JIRA 变更等)。 |
| 依赖触发 | 上游任务完成后,自动触发下游任务(如“构建成功→部署”流水线)。 |
| 手动触发 | 用户手动点击“立即构建”(属于辅助方式,非自动化调度核心)。 |
| 其他触发 | 如“轮询 SCM”(定期检查代码仓库变更)、“参数化触发”等。 |
Jenkins 内置 Cron 表达式支持,语法与 Linux crontab 类似,但多了一个字段(共 5 个字段),格式为:
分钟 小时 日 月 星期
(每个字段的取值范围见下文)
| 字段 | 取值范围 | 特殊字符说明 |
|---|---|---|
| 分钟 | 0-59 | * 任意;, 枚举(如 0,30 整点和半点);- 范围(如 10-20);/ 步长(如 */10 每10分钟)。 |
| 小时 | 0-23 | 同上(如 */2 每2小时)。 |
| 日 | 1-31 | 同上(如 1-7 每月前7天)。 |
| 月 | 1-12 或 Jan-Dec | 同上(如 Jan,Mar 1月和3月)。 |
| 星期 | 0-7 或 Sun-Sat | 0和7均代表周日(如 Mon-Fri 工作日)。 |
0 2 * * **/30 * * * *0 9 * * 1-50 3 1 * *15,45 * * * *Build periodically(定时构建)。0 2 * * *)。最常用的自动化调度方式——代码提交后自动触发构建,需结合代码仓库(GitHub/GitLab/Gitee 等)的 Webhook 功能。
GitHub Integration Plugin、GitLab Plugin)。push/merge 等事件时,仓库向 Jenkins 发送 HTTP 请求。Jenkins 端:
GitHub Integration Plugin(如果未安装)。Git,填写仓库 URL 和凭证。GitHub hook trigger for GITScm polling(旧版可能是 Build when a change is pushed to GitHub)。GitHub 端:
Settings → Webhooks → Add webhook。Payload URL 填写:http://<Jenkins地址>/github-webhook/(注意末尾斜杠)。Content type 选择 application/json。Which events would you like to trigger this webhook? → 选择 Just the push event(或按需选择)。Add webhook 完成配置。测试:向仓库提交代码,GitHub 会触发 Webhook,Jenkins 自动构建。
当多个任务存在依赖关系时(如“编译→测试→部署”),可通过上游任务成功后触发下游任务实现流水线调度。
方式 1:下游 Job 配置“上游 Job 触发器”
进入下游 Job 配置 → 构建触发器 → 勾选 Build after other projects are built → 填写 Projects to watch(上游 Job 名称)→ 选择触发条件(如 Stable 仅上游稳定构建时触发)。
方式 2:上游 Job 配置“Post-build Actions”
进入上游 Job 配置 → 构建后操作 → 添加 Trigger parameterized build on other projects → 填写下游 Job 名称 → 配置参数(如需要传递构建号)。
上游 Job build-project 成功后,自动触发下游 Job deploy-project:
build-project 配置:构建后操作 → Trigger parameterized build on other projects → 下游 Job 填 deploy-project,条件选 Stable。deploy-project 无需额外配置(或可选“上游触发器”)。如果无法配置 Webhook(如代码仓库不支持),可使用“轮询 SCM”——Jenkins 定期(按 Cron 表达式)检查代码仓库是否有新提交,有则触发构建。
Poll SCM。*/10 * * * * 每10分钟检查一次)。⚠️ 注意:轮询 SCM 比 Webhook 效率低(频繁检查仓库),优先用 Webhook。
如果任务需要动态参数(如“部署到测试环境/生产环境”),可结合参数化构建 + 调度触发。
This project is parameterized → 添加参数(如 ENV 选项参数:test/prod)。示例(通过 URL 手动触发参数化任务):
http://<Jenkins地址>/job/<Job名称>/build?ENV=prod(需开启“触发远程构建”并配置 Token)。
Pipeline 是 Jenkins 的核心功能,支持通过 Jenkinsfile 定义完整的调度逻辑,更灵活。
pipeline {
agent any
triggers {
// 定时触发:每天凌晨2点
cron('0 2 * * *')
// GitHub Webhook 触发(需安装 GitHub 插件)
githubPush()
}
stages {
stage('Build') {
steps {
echo 'Building...'
}
}
stage('Test') {
steps {
echo 'Testing...'
}
}
}
}
triggers 块定义触发条件,支持 cron、githubPush、upstream 等。对于多分支项目(如 main/dev 分支),可使用多分支流水线自动为每个分支创建 Job,并支持分支级别的调度。
配置:
Multibranch Pipeline。Jenkinsfile 可自定义调度规则(如 dev 分支每小时构建,main 分支仅合并时构建)。quiet period(安静期)设置——Job 配置 → General → Quiet period(单位:秒),触发后等待指定时间再构建(避免频繁提交导致多次构建)。Do not allow concurrent builds(禁止并发构建)。Build Monitor Plugin)查看任务调度执行情况。Manage Jenkins → System Log)。GitHub Hook Log。通过以上方式,可灵活实现 Jenkins 任务的自动化调度,覆盖从简单定时到复杂流水线的各类场景。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。