# Jenkins教程 - 5 构建触发器

在前面使用的触发器是触发远程构建,也就是通过 Git 钩子回调来触发构建。

查看构建任务,还有一些其他的构建触发器。

先简单介绍一下:

  1. Build whenever a SNAPSHOT dependency is built(快照依赖构建):
    • 触发方式: 如果你的项目依赖于其他 Maven 项目的 "快照" 版本,选择这个触发器会在这个依赖项目构建 "快照" 版本时自动触发你的项目构建。
    • 使用场景: 适用于 Maven 项目,确保当相关依赖项目有新的 "快照" 版本时,及时构建你的项目。
  2. 触发远程构建 (例如,使用脚本):
    • 触发方式: 通过远程命令或脚本手动触发 Jenkins 开始构建你的项目,而不需要通过 Jenkins 界面进行操作,前面使用 Gitee 和 GitLab 的 WebHooks 使用的是这个
    • 使用场景: 适用于需要远程或自动化地触发 Jenkins 构建的情况,例如通过脚本或其他工具。
  3. 其他工程构建后触发:
    • 触发方式: 当其他指定的 Jenkins 项目构建成功或失败时,Jenkins 会自动触发当前项目的构建,也就是我们有多个构建任务,各个任务可以有关联关系,依赖于其他项目的构建。
    • 使用场景: 适用于有一系列相互关联的项目,确保某个项目构建完成后,相关的其他项目也能相应地构建。
  4. 定时构建:
    • 触发方式: 设置一个定时器,告诉 Jenkins 在特定的时间点或者时间间隔内自动开始构建项目,不管 Git 中的代码有没有发生变化,都会重新构建,通常不会采用此种方式
    • 使用场景: 适用于需要在每天、每周或其他固定时间点触发构建的情况。
  5. GitHub hook trigger for GITScm polling:
    • 触发方式: 如果项目托管在 GitHub 上,选择这个触发器会通过 GitHub Webhook 实时检测代码仓库变更,从而触发构建,实际开发中,应该不会将代码托管到 GitHub,忽略
    • 使用场景: 适用于与 GitHub 集成,确保在代码提交到 GitHub 时能够即时触发构建。
  6. 轮询 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 的配置方式即可。