当前位置: 首页 > news >正文

基于 Kickstart 的 Linux OS CICD 部署(webhook)

在这里插入图片描述

Author:Arsen
Date:2025/11/05


目录

    • 背景
    • 环境
    • 配置
      • Pipeline
      • Gitlab Webhook
    • 验证


背景

之前写了一篇 OS 自动化安装的文章《基于 IPMI + Kickstart + Jenkins 的 OS 自动化安装》,并没有给出具体的 Pipeline 流水线脚本,因为这些脚本实际上编写是灵活的,重点是要具备 Pipeline 的基础语法和 Linux OS 部署的整体思路。

而我的 Pipeline 流水线脚本是通过 gitlab 进行版本控制的,但熟悉 Jenkins 构建流程的朋友应该会发现,你每次的 Pipeline 流水线脚本更新后的提交,并不会实时在 Jenkins 端进行相应,比如 Pipeline 流水线脚本新增某个菜单控件或其他选项参数,都需要手动到 Jenkins 触发一次才会更新,才会显示你所添加的菜单控件或其他选项参数,这其实是比较麻烦的。

这时就需要使用到 Jenkins 和 Gitlab 的 webhook 功能,其实这个功能我早在三四年前也发布过 webhook 相关的文章。那 webhook 是什么?有什么用?通俗地讲它叫“钩子”,如果你的 Pipeline 流水线作业进行了 Gitlab 版本控制,且 Jenkins 和 Gitlab 配置了 webhook,就可实现 Pipeline 流水线脚本的分支推送后 Jenkins 构建界面的实时更新。

但并不是所有项目都推荐使用 webhook,要根据实际情况选择性使用,建议你使用 webhook 时,Pipeline 流水线脚本最好是加上一些构建开关,避免误操作自动构建后目标 OS 发生异常。

所以,本次的目标:Gitlab 管理的 Pipeline 流水线脚本更新且推送后,实现 Jenkins 实时更新。

环境

硬件:

1台 x86/aarch64 16C/64G 硬件服务器,用于部署 CICD 环境。

软件:

Jenkins/2.440.3,Generic Webhook Trigger 插件

Gitlab/15.11.2

配置

Pipeline

在 Jenkins 的 Pipeline 流水线脚本中新增 triggers 自动触发配置,注意需要 Jenkins 提前安装 Generic Webhook Trigger 插件。

重点关注:token 和 regexpFilterExpression 部分

pipeline {agent any// 自动触发配置triggers {GenericTrigger(genericVariables: [[key: 'ref', value: '$.ref'],[key: 'commit_message', value: '$.commits[0].message'],[key: 'author', value: '$.commits[0].author.name']],causeString: 'GitLab webhook triggered by $ref',token: 'jenkins-gitlab-token-devops',printContributedVariables: false,printPostContent: false,regexpFilterText: '$ref',regexpFilterExpression: 'refs/heads/(main|v1.0.1)')}// 全局参数parameters {...}stages {stage('OS_init') {...}stage('OS_grub') {...}stage('OS_install') {...}...}
}

triggers 字段解释:

1.genericVariables - 提取 GitLab Webhook 数据
作用:从 GitLab 的 JSON payload 中提取变量
JSON路径说明:
$.ref → GitLab 推送的引用路径,如:refs/heads/main
$.commits[0].message → 第一个提交的提交信息
$.commits[0].author.name → 提交者姓名
可用变量:在流水线中通过 env.ref, env.commit_message, env.author 访问2.causeString - 构建原因描述
作用:显示在 Jenkins 构建历史中的触发原因
causeString: 'GitLab webhook triggered by $ref' → $ref 会被替换为实际的引用路径3.token - 安全令牌
作用:安全验证,确保只有合法的 GitLab 可以触发
要求:GitLab Webhook 中必须配置相同的 token
token: 'jenkins-gitlab-token-devops'4.printContributedVariables - 调试信息
作用:是否在构建日志中打印提取的变量值
printContributedVariables: false → true:开发调试时使用,false:生产环境建议关闭,避免敏感信息泄露5.printPostContent - 请求内容打印
作用:是否打印完整的 Webhook 请求内容 → true:调试时查看完整的 JSON payload,false:生产环境建议关闭6.regexpFilterText - 过滤文本
作用:指定用于正则过滤的变量
regexpFilterText: '$ref' → 使用 $ref 变量(分支引用路径)进行过滤7.regexpFilterExpression - 正则表达式
作用:只有匹配该正则表达式时才触发构建
regexpFilterExpression: 'refs/heads/(main|v1.0.1)' → 只监听 main 和 v1.0.1 分支的推送

配置完成后,Jenkins 手动构建一次,使 triggers 生效,便于获取 webhook URL,如下图:

image-20251105113258561

该 URL(http://JENKINS_URL/generic-webhook-trigger/invoke)用于后续 Gitlab 的“钩子”配置。

Gitlab Webhook

首先确认 Jenkins 的 Pipeline 流水线脚本 Git 版本仓库,如下图:

image-20251105113825760

再次确认控制的版本号,如下图:

image-20251105113946208

确认后,到 Gitlab web 端进行 webhook 配置,具体步骤如下:

找到控制的 Git 仓库后,点击 Settings => Webhooks

将 3.1 部分获取到的 RUL、Pipeline 配置的 token 正确填写到对应部分,RUL 的 IP 就是 Jenkins 的 IP

image-20251105123100525

然后点击 “Add webhook”,随后即可添加成功,如下图:

image-20251105123308002

接着点击 “Test => Push events”看是否可用:

image-20251105123523414

如下图返回 “200” 状态码说明该 webhook 可用:

image-20251105123601907

这里要注意的是,为什么一定要在这个 Git 仓库下配置 webhook,在其他仓库难道不行吗?其实你在哪个 Git 仓库配置无所谓,都能触发 Jenkins 对应作业的自动构建效果,只是因为 Jenkins 作业用到了 Git 上的这个仓库,我们才会在这个仓库创建 webhook,否则就毫无意义了。

验证

Pipeline 流水线脚本更新:新增一个 webhook 测试控件

新增完成后推送到 Git 仓库的 v1.0.1 分支:

image-20251105124746163

然后登录 jenkins web 端查看是否自动触发构建,如下图,已正常自动触发构建了,因为我们前面 pipeline 配置的就是 main 或 v1.0.1 分支,所以当这两个分支只要有提交就会触发 webhook:

image-20251105124921763

自此,基于 Kickstart 的 Linux OS CICD 部署(webhook)验证完毕,本次没有演示 OS 部署,因为我之前的文章《基于 IPMI + Kickstart + Jenkins 的 OS 自动化安装》已经验证过了,大家可以结合在一起看。

http://www.dtcms.com/a/573181.html

相关文章:

  • 哪家网络公司做网站好全国免费信息发布平台
  • 《C++ 搜索二叉树》深入理解 C++ 搜索二叉树:特性、实现与应用
  • iOS 发布 App 全流程指南,从签名打包到开心上架(Appuploader)跨平台免 Mac 上传实战
  • 人工智能Deepseek医药AI培训师培训讲师唐兴通讲课课程纲要
  • 做网站需要学哪些语言鞍山市人力资源招聘信息网
  • Fastadmin中使用小程序登录
  • 网站功能优化的方法办一个购物网站要多少钱
  • SpringCloud+Netty集群即时通讯项目
  • 企业内容安全管理策略有哪些?
  • PPT处理控件Aspose.Slides教程:使用Java将PowerPoint笔记导出为PDF
  • 覆盖 DC50-1000V!AIM-D500-CA 绝缘监测仪,满足不同充电桩安全监测需求
  • 2025_11_5_刷题
  • 【数据结构与算法】手撕排序算法(二)
  • 网站开发做什么科目北京网站建设大概多少钱
  • 06.LangChain的介绍和入门
  • 网站建设数据库放哪人才网网站模板
  • 织梦 调用网站地址网站建设公司官网
  • Docker快速部署--docker-compose一键多容器应用编排部署
  • LabVIEW 高速图像实时系统
  • Flutter项目在HarmonyOS(鸿蒙)运行报错问题总结
  • Unity LODGroup详解
  • Doris在CMP7(类Cloudera CDP 7 404版华为Kunpeng)启用 Kerberos部署Doris
  • 每周读书与学习->JMeter主要元件详细介绍(四)再谈取样器
  • 【个人成长笔记】在 Linux 系统下撰写老化测试脚本以实现自动压测效果(亲测有效)
  • 租用服务器一般是谁帮助维护网站安全营销网站找什么公司做
  • 四川建设厅下载专区网站iis7 伪静态 wordpress
  • 在FPGA中实现频率计方案详解(等精度测量)
  • HTTP 是什么?它是如何工作的
  • 西安网站seo技术厂家漯河市源汇区建设局网站
  • 火山引擎发布Data Agent新能力,推动用户洞察进入“智能3.0时代”​