0%

自动执行构建

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

在实际开发中,手动点击 “立即构建” 显然不够高效。理想的流程是:当代码推送到 Git 仓库(如 Gitee、GitHub)后,Jenkins 能自动检测变动并触发构建。本文将介绍两种常用的自动构建方案,帮你实现代码提交即自动化构建的闭环。

方案一:定时轮询

这是最简单的自动触发方式,通过定时检查 Git 仓库是否有代码变动,如果检测到新提交则自动执行构建。适合对实时性要求不高、或仓库访问受限的场景。

配置步骤

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

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

  3. 在输入框中填写

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

    1
    H/5 * * * *

    表示 “每 5 分钟检查一次仓库变动”(H 是随机偏移量,避免所有项目同时触发导致服务器压力集中)。这里的配置是指五分钟轮询检测一下git仓库是否有变动,如果这段时间有提交的话,会自动进行构建,如果该时间段内没有新的提交,则不会进行构建

    自动构建

定时表达式规则

Jenkins 的定时表达式与 Linux crontab 类似,格式为 分 时 日 月 周,支持通配符和特殊符号:

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

优缺点

  • 优点:配置简单,无需修改仓库或网络设置,兼容性强。
  • 缺点:存在延迟(取决于轮询频率),频繁轮询可能浪费服务器资源。

方案二:仓库触发(WebHook)

这是更高效的方式:当代码推送到仓库时,Git 仓库通过WebHook 主动通知 Jenkins“有新代码提交”,Jenkins 立即触发构建。实时性高,几乎无延迟。

前置条件

  • Jenkins 服务器需能被公网访问(或与 Git 仓库在同一局域网,确保仓库能调用 Jenkins 接口)。
  • 已配置好 Jenkins 与 Git 仓库的连接(如前文提到的 Gitee 插件和凭证)。

以 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

推送一段代码到 Gitee 仓库,观察 Jenkins 项目是否自动触发构建:

  • 若触发成功,项目页面的「Build History」会新增一条构建记录。
  • 若失败,可在 Gitee WebHook 管理页面查看「最近推送记录」,或在 Jenkins 系统日志(「Manage Jenkins」→「System Log」)中排查错误(常见问题:Jenkins 地址不可访问、密钥不匹配、插件未安装)。

优缺点

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

两种方案对比与选择建议

方案 实时性 配置复杂度 适用场景
定时轮询 低(延迟取决于频率) 简单 小项目、仓库访问受限、实时性要求低
WebHook 触发 高(实时) 中等 生产环境、实时性要求高、仓库可访问 Jenkins

最佳实践建议

  1. 优先用 WebHook:对于生产环境,建议使用 WebHook 实现实时触发,减少延迟和资源浪费。
  2. 配合分支过滤:通过「Branch Specifier」或插件限制特定分支(如 maindev)的自动构建,避免无关分支提交触发构建。
  3. 添加失败通知:在「Post-build Actions」中配置邮件或企业微信通知,当自动构建失败时及时提醒开发者。

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