0%

自动执行构建

jenkins自动构建配置:代码提交后自动触发构建的两种方案

不想每次提交代码都去点”立即构建”?这篇教你两种自动触发方式

之前我们聊了怎么安装 Jenkins、怎么配置工具链,但有一个很现实的问题:每次提交完代码都要手动去点一下构建,真的很烦

尤其是一天提交几十次的时候,点都点烦了。这篇专门讲一下怎么让 Jenkins 自动检测代码变动并触发构建。我自己的经历是:先用了轮询,后来嫌慢改成了 WebHook。

方案一:定时轮询

这个方法很”笨”,但配置起来确实省事——就是让 Jenkins 每隔几分钟去 Git 仓库看一眼:有新的提交就拉下来构建,没有就拉倒。

配置步骤

  1. 进入你的 Jenkins 项目配置页面(点击项目名称 → 左侧「Configure」)。

  2. 滚动到「Build Triggers」(构建触发器)部分,勾选「Poll SCM」。

  3. 在输入框中填写

    定时表达式,定义轮询频率。例如:

    1
    H/5 * * * *

    这个表达式的意思是”每 5 分钟检查一次”。那个 H 是 Jenkins 自己加的一个随机偏移量,防止所有项目都在同一秒去轮询,把服务器搞崩。

    自动构建

定时表达式规则

Jenkins 的表达式格式和 Linux 的 crontab 一样:分 时 日 月 周。几个常用的写法:

  • *:任意值(如 * * * * * 表示每分钟检查)。
  • H:随机值(例如 H/10 * * * * 表示每 10 分钟随机时间点检查)。
  • */N:每隔 N 单位(如 0 */2 * * * 表示每 2 小时检查一次)。
  • 固定值:如 0 9 * * 1-5 表示每周一至周五上午 9 点检查。

优缺点

  • 优点:配置简单,不用动 Git 仓库的任何设置,内网外网都能用。
  • 缺点:有延迟。你设 5 分钟轮询一次,那从 push 代码到触发构建,平均要等 2.5 分钟,最长可能等 5 分钟。而且如果项目多了,每个项目都去轮询,服务器压力也不小。

方案二:仓库触发(WebHook)

这是更高效的方式:Git 仓库在你 push 代码之后,主动通知 Jenkins,Jenkins 收到就立刻开始构建。几乎是实时的。

前置条件

WebHook 需要 Git 仓库能访问到 Jenkins:

  • 如果你的 Jenkins 跑在本地,需要有个公网地址(或者用内网穿透工具)
  • 如果 Jenkins 和生产环境一样有公网 IP,那就直接配

另外,Jenkins 和 Gitee/GitHub 的凭证连接要先配好(这个在上一篇工具配置里已经说过了)。

以 Gitee 为例配置 WebHook

步骤 1:配置 Jenkins 项目触发器
  1. 进入项目配置页面 →「Build Triggers」,勾选「GitHub hook trigger for GITScm polling」(Gitee 兼容 GitHub 的 WebHook 格式,直接勾选即可)。
  2. 如果需要更精细控制(如指定分支触发),可以配合「Generic Webhook Trigger」插件(需要提前安装),通过解析仓库推送的 JSON 数据过滤触发条件。
步骤 2:在 Gitee 仓库配置 WebHook
  1. 登录 Gitee 仓库,进入仓库主页 → 右侧「管理」→「WebHook 管理」→「添加 WebHook」。

  2. Payload URL:填写 Jenkins 的 WebHook 接收地址,格式为:

    1
    http://你的Jenkins地址:端口/github-webhook/

    本地测试的话就是 http://localhost:8080/github-webhook/,线上换成你的公网地址。

  3. Secret(可选):设置一个密钥,和 Jenkins 中「Generic Webhook Trigger」的密钥对应,用于验证请求合法性。

  4. 触发事件:勾选「Push 事件」(代码推送时触发),如果需要其他事件(如合并请求)可以按需勾选。

  5. 点击「添加」完成配置,Gitee 会自动发送一个测试请求,返回状态码 200 即表示配置成功。

验证 WebHook

push 点代码试试,去 Jenkins 项目页面看 Build History 里有没有自动新增一条记录。如果没有,去 Gitee 的 WebHook 管理页面看最近的推送记录,一般能看到报错原因。或者在 Jenkins 系统日志(「Manage Jenkins」→「System Log」)中排查错误(常见问题:Jenkins 地址不可访问、密钥不匹配、插件未安装)。

优缺点

  • 优点:实时性高(代码提交后立即触发),而且没有轮询的无效请求,省服务器资源。
  • 缺点:需要确保 Jenkins 可被仓库访问,配置稍复杂(尤其是网络和密钥验证)。

两种方案怎么选?

场景 建议
本地开发测试、个人小项目 轮询就够了,省事
生产环境、团队协作 必须上 WebHook,实时性很重要
Jenkins 在防火墙内,仓库访问不到 只能轮询

我自己的做法是:本地开发环境用轮询(懒得折腾网络),线上环境用 WebHook(正经项目等不起那几分钟)。

欢迎关注我的其它发布渠道