# Jenkins教程 - 5 构建触发器
在前面使用的触发器是触发远程构建,也就是通过 Git 钩子回调来触发构建。
查看构建任务,还有一些其他的构建触发器。
先简单介绍一下:
- Build whenever a SNAPSHOT dependency is built(快照依赖构建):
- 触发方式: 如果你的项目依赖于其他 Maven 项目的 "快照" 版本,选择这个触发器会在这个依赖项目构建 "快照" 版本时自动触发你的项目构建。
- 使用场景: 适用于 Maven 项目,确保当相关依赖项目有新的 "快照" 版本时,及时构建你的项目。
- 触发远程构建 (例如,使用脚本):
- 触发方式: 通过远程命令或脚本手动触发 Jenkins 开始构建你的项目,而不需要通过 Jenkins 界面进行操作,前面使用 Gitee 和 GitLab 的 WebHooks 使用的是这个。
- 使用场景: 适用于需要远程或自动化地触发 Jenkins 构建的情况,例如通过脚本或其他工具。
- 其他工程构建后触发:
- 触发方式: 当其他指定的 Jenkins 项目构建成功或失败时,Jenkins 会自动触发当前项目的构建,也就是我们有多个构建任务,各个任务可以有关联关系,依赖于其他项目的构建。
- 使用场景: 适用于有一系列相互关联的项目,确保某个项目构建完成后,相关的其他项目也能相应地构建。
- 定时构建:
- 触发方式: 设置一个定时器,告诉 Jenkins 在特定的时间点或者时间间隔内自动开始构建项目,不管 Git 中的代码有没有发生变化,都会重新构建,通常不会采用此种方式。
- 使用场景: 适用于需要在每天、每周或其他固定时间点触发构建的情况。
- GitHub hook trigger for GITScm polling:
- 触发方式: 如果项目托管在 GitHub 上,选择这个触发器会通过 GitHub Webhook 实时检测代码仓库变更,从而触发构建,实际开发中,应该不会将代码托管到 GitHub,忽略。
- 使用场景: 适用于与 GitHub 集成,确保在代码提交到 GitHub 时能够即时触发构建。
- 轮询 SCM:
- 触发方式: Jenkins 会定期检查你的版本控制系统(如 Git、SVN)以查看是否有新的代码提交,如果有,则触发构建。
- 使用场景: 适用于不支持 Webhook 的版本控制系统,或者在某些环境下无法即时通知 Jenkins 的情况。
# 5.1 轮询 SCM
除了手动触发构建、webhook触发构建,轮询 SCM构建也是比较常用的构建方式。
前面在配置码云的webhook的时候,是无法通过码云来调用局域网 Jenkins 的接口来通知 Jenkins 来进行构建的,所以这个时候我们可以使用 轮询 SCM
触发器。
下面打开前面构建任务的配置,配置构建触发器为 轮询 SCM
。
这里的日程表表示的是触发时间,和标准的 cron 表示有区别:
- 没有秒,第一位表示分钟;
- 如果配置
*/3 * * * *
表示 3 分钟执行一次,但是我们配置了*/3 * * * *
,上面提示分散负载应该用 H/3 * * * * 而不是 */3 * * * *
,这里涉及到一个H
,表示Hash
,这是 Jenkins 特有的语法,根据任务的唯一标识(名称或ID)计算一个哈希值,根据这个哈希值来决定任务实际触发的时间。为什么这么做呢?如果有很多任务,每个任务都配置的是*/3 * * * *
,那么所有的任务都会同一个时间触发,导致负载很高,使用H/3 * * * *
,这样每个任务计算的哈希值不一样,开始触发的时间是不一样的,主要是为了错峰。
所以修改 轮询 SCM
触发器的日程表为: H/3 * * * *
。
构建触发器已经配置好了,每隔 3 分钟会检查git的代码有没变化,如果有变化就会触发构建。
重新修改代码,然后推送到 gitee,在 3 分钟多点,会发现 Jenkins 自动进行了构建。
# 5.2 定时构建
方式和 轮询 SCM
的配置方式是类似的,也是使用 Jenkins 非标准的 cron 表达式。
区别就是定时构建构建的时候,不会区分内容有没有发生变化,直接就构建了,用的不多,参考一下 轮询 SCM
的配置方式即可。