3. Jenkins定时构建与轮询SCM
任务目标
在Jenkins中创建一个自由风格任务,分别配置定时构建(每天一次)与轮询SCM(每分钟检查代码变更),并通过构建日志与触发原因验证两种触发方式的差异。
前置条件
- Jenkins 2.x 已安装并启动,本机可访问
http://localhost:8080 - 已安装 Git 插件(系统管理 → 插件管理 → 已安装)
- 准备一个本地 Git 仓库(可为空仓库或任意测试仓库),用于轮询 SCM 测试
实现步骤
1. 创建测试任务
- 点击 新建任务,输入名称
schedule-demo,选择 自由风格项目,点击确定。 - 在 源码管理 中选择 Git,Repository URL 填入本地仓库路径(如
/home/user/test-repo或https://github.com/example/demo.git)。 - 在 构建触发器 中勾选两项:定时构建 与 轮询SCM。
2. 配置定时构建(每天一次)
在“定时构建”的日程表中输入:
H 2 * * *
含义:每天凌晨 2 点执行一次构建(H 为哈希散列值,避免同一时刻并发)。
3. 配置轮询SCM(每分钟检查)
在“轮询SCM”的日程表中输入:
* * * * *
含义:每分钟检查一次远程仓库是否有新提交。若检测到变更,则触发构建;若无变更,则不触发。
4. 添加构建步骤
在 构建 部分点击 增加构建步骤 → 执行 shell,输入:
echo "Build triggered at $(date)"
验证方法
验证定时构建
- 保存任务后,等待至设定的时间(或临时将日程改为
* * * * *以便快速观察)。 - 进入任务页面 → 构建历史,查看最新一次构建。
- 点击该次构建 → 控制台输出,确认首行显示类似:
Started by timer
这表示由定时触发器启动。
验证轮询SCM
- 在本地 Git 仓库中做一次提交并推送(若为本地路径,直接 commit 即可)。
- 等待最多 1 分钟,观察 Jenkins 任务页面。
- 出现新构建后,查看控制台输出,首行应显示:
Started by an SCM change
若仓库无变更,则不会产生新构建,且任务页面“最近一次轮询”时间会持续更新,但构建历史不变。
判定标准
- 定时构建触发时,控制台输出包含
Started by timer。 - 代码提交后 1 分钟内触发构建,控制台输出包含
Started by an SCM change。 - 两种触发方式均能正确执行 Shell 步骤并打印时间戳。
常见问题
- 轮询不触发:检查 Git 仓库 URL 是否可访问、Jenkins 服务器是否有该仓库的读取权限;本地路径需确保 Jenkins 进程用户有访问权限。
- 定时构建未执行:确认服务器时区设置(系统管理 → 系统设置 → 时区),Jenkins 默认使用服务器本地时间。
- 两种触发器同时满足:同一分钟若既有定时触发又有代码变更,Jenkins 只会执行一次构建,触发原因显示为其中一种(通常为 SCM 变更优先)。
触发机制说明
上图展示了两种触发器的判断路径:定时构建到点直接触发;轮询SCM则先检查仓库是否有新提交,有变更才触发构建,无变更则跳过。通过控制台输出的首行原因即可区分实际由哪种方式触发。