温馨提示×

CentOS Jenkins如何配置构建触发器

小樊
36
2025-12-13 19:12:15
栏目: 智能运维

CentOS 上 Jenkins 构建触发器配置指南

一 前置准备

  • 确保 Jenkins 已安装并运行,且可通过 CentOS 防火墙访问(如开放 8080 端口)。如使用反向代理或自签名证书,注意外网 Webhook 的可达性与证书信任。
  • 安装常用插件:Git pluginGitHub pluginGitLab pluginGitee plugin(按需安装,用于代码拉取与 Webhook 事件)。
  • 源码管理建议使用 SSH 方式拉取代码:在 Jenkins 凭据中配置 SSH 私钥,并在任务中选用对应 Credentials;如需免密执行远程命令,可在 Jenkins 主机jenkins 用户配置 SSH 免密登录目标机器(如使用 ssh-copy-id)。

二 内置触发器配置

  • 触发远程构建
    • 在任务配置 Build Triggers 勾选 Trigger builds remotely (e.g., from scripts),设置 Authentication Token(如:TOKEN_NAME)。
    • 触发 URL:JENKINS_URL/job/<项目名>/build?token=TOKEN_NAME;如为参数化任务使用:/buildWithParameters?token=TOKEN_NAME
    • 示例:http://192.168.1.20:8080/job/demo/build?token=remote-build,用浏览器或脚本 curl 访问即可触发构建。
  • 其他工程构建后触发
    • 勾选 Build after other projects are built,填写上游 项目名称(支持多个,逗号分隔),可设置触发条件(如仅 SUCCESS 时触发)。
    • 适用于 A 构建完成后自动触发 B 的场景。
  • 定时构建(Build periodically)
    • 勾选 Build periodically,填写 Cron 表达式(5 字段:分 时 日 月 周;可用 H 做时间散列,避免同一时刻并发)。
    • 示例:
      • 30 分钟:H/30 * * * *
      • 工作日 9:00–17:002 小时:H H(9-16)/2 * * 1-5
      • 每天 02:00H 2 * * *
  • 轮询 SCM(Poll SCM)
    • 勾选 Poll SCM,填写 Cron 表达式定时检查代码变更(如 H/5 * * * *5 分钟检查一次)。
    • 注意:轮询会定时扫描仓库,可能带来 系统开销,优先使用 Webhook 事件驱动。

三 代码托管平台 Webhook 配置

  • GitLab
    • Jenkins 项目启用 GitLab triggers(安装 GitLab 插件后可见),复制 Webhook URLSecret Token
    • GitLab 管理后台进入 Admin Area → Settings → Network,勾选 Allow requests to the local network from webhooks and integrations(允许来自 Webhooks 的对本地网络请求)。
    • 进入项目 Settings → Webhooks,填写 URL 与 Secret,选择触发事件(如 Push eventsMerge Request events),点击 Test 发送测试事件并验证。
  • Gitee
    • Jenkins 项目勾选 Enabled Gitee triggers,按需选择 Push EventsOpened/Updated/Accepted Merge Request Events 等,并可设置 Secret Token for Gitee WebHook
    • Gitee 项目 → 设置 → WebHooks 添加 Webhook,填写 URL密码/Secret,选择事件并测试。
  • GitHub
    • GitHub 项目 → Settings → Webhooks → Add webhook 添加 Payload URL(Jenkins 生成的 Webhook URL),选择 Content type(如 application/json),勾选事件(如 PushPull request)。
    • Jenkins → Manage Jenkins → System → GitHub → Add GitHub Server 配置 Personal Access Token,测试连接后使用。
    • Jenkins 在内网导致 GitHub 无法直连,可使用 内网穿透/反向代理或改用 轮询 SCM 作为备选。

四 Pipeline 项目写法示例

  • 定时触发
    • Jenkinsfile 中使用 triggers { cron('H/15 * * * *') } 实现每 15 分钟触发一次。
  • 上游任务触发
    • 使用 triggers { upstream('jobA,jobB', threshold: hudson.model.Result.SUCCESS) },当 jobA 或 jobB 构建结果为 SUCCESS 时触发当前任务。

五 常见问题与排查

  • Webhook 返回 302 或无法触发
    • 检查 CSRF 保护匿名读/构建权限;新版 Jenkins 可能需要为 Webhook 配置 CSRF 豁免或使用 API Token;确保 Jenkins URL 与 Webhook 回调地址一致(协议、端口、路径)。
  • 内网 Jenkins 无法被 GitHub/GitLab 访问
    • 使用 内网穿透(如 ngrok)、反向代理或临时改用 Poll SCM;注意 HTTPS 证书代理白名单配置。
  • 轮询开销大
    • 优先使用 Webhook 事件驱动(Push、Merge Request 等),减少无效扫描与构建堆积。
  • SSH 免密与权限
    • 若构建步骤包含 ssh root@HOST 等命令,确保 jenkins 用户已对目标主机 免密登录;必要时在 Jenkins 节点配置 SSH Agent 与凭据。

0