基于k8s的Jenkins CI/CD平台部署实践(二):流水线构建与自动部署全流程

基于k8s的Jenkins CI/CD平台部署实践(二):流水线构建与自动部署全流程

文章目录

  • 基于k8s的Jenkins CI/CD平台部署实践(二):流水线构建与自动部署全流程
  • 一、Jenkins简介
  • 二、系统架构与环境说明
    • 1. 系统架构
    • 2. 网络通信与认证准备
  • 三、配置Jenkins凭据
  • 四、Jenkins流水线设计
  • 总结


随着容器化和微服务架构的深入发展,企业对持续集成与持续交付(CI/CD)系统的自动化程度、可扩展性与可维护性提出了更高要求。Jenkins 作为主流的 CI/CD 工具,凭借其丰富的插件生态与强大的流水线能力,能够灵活对接各类开发、构建、发布工具链。

在前文中,我们已基于 Kubernetes 成功部署 Jenkins 并实现持久化存储挂载。本篇将进一步聚焦 Jenkins 在 Kubernetes 环境中的流水线实践,介绍如何通过声明式流水线实现代码变更触发、自动构建、镜像制作与推送、以及部署至 Kubernetes 集群的全流程自动化。

一、Jenkins简介

Jenkins 是一款开源的自动化持续集成与持续交付(CI/CD)工具,拥有丰富的插件生态和高度可配置的流水线系统。它能够帮助开发团队实现自动化构建、测试、打包、部署等流程,从而提高开发效率与软件交付质量。
得益于其良好的可扩展性和与主流版本控制、构建工具、容器平台(如 Docker、Kubernetes)的高度兼容,Jenkins 已成为 DevOps 实践中的核心工具之一。通过与 Kubernetes 集成,Jenkins 可以动态调度构建任务至集群中的 Pod 中运行,实现弹性伸缩与资源隔离,适用于构建大规模分布式的 CI/CD 系统。
在这里插入图片描述

二、系统架构与环境说明

1. 系统架构

为实现 Jenkins 在 Kubernetes 环境下的自动构建与部署流水线,整体系统架构如下:

  • Kubernetes 集群(CI/CD 编排平台)主机范围:192.168.100.130 ~ 192.168.100.132
  • Docker 主机(镜像构建节点)地址:192.168.100.30
  • GitLab 代码仓库服务器地址:192.168.100.100

当前已部署测试Pod,名字为xxx-7db499bfb8-whjsj,命名空间cicd,使用的镜像版本是hwj:v1.0.5

在这里插入图片描述
在这里插入图片描述

2. 网络通信与认证准备

由于 Jenkins 需要跨主机访问 Docker,为简化认证过程与保障流水线顺利运行,需配置如下免密通道:

✅ Jenkins Pod → Docker 主机(SSH 免密)
用于将构建产物(如 jar 包)传输到 Docker 主机,并远程执行镜像构建与推送 Harbor 的命令。
✅ Jenkins Pod → Kubernetes 集群(SSH 免密)
用于通过 SSH 远程登录至 Kubernetes 节点主机,执行 kubectl apply -f 命令,实现部署自动化。

# 进入Jenkins Pod内部
kubectl exec -it -n cicd jenkins-xxxx -- /bin/bash# 生成ssh公钥
ssh-keygen -t rsa# 分发公钥,配置免密
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.100.30
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.100.130

三、配置Jenkins凭据

为了让 Jenkins 能够无缝访问 GitLab 仓库、我们需要在 Jenkins 中提前配置好外部系统的认证凭据。Jenkins 凭据统一通过「系统管理 → 凭据管理」进行配置,供流水线任务在运行时调用。
在这里插入图片描述
在这里插入图片描述
配置凭据

在这里插入图片描述
在这里插入图片描述

四、Jenkins流水线设计

以下为一个完整的声明式流水线,包含从拉取代码、构建打包、构建镜像、推送 Harbor 到自动部署至 Kubernetes 的全流程

pipeline {agent anyenvironment {git_address = "http://192.168.100.100/yw/hwj.git"git_auth = "jenkins-to-gitlab"                 // Jenkins中配置的GitLab凭据IDdocker_build_host = "192.168.100.30"k8s_build_host = "192.168.100.130"branch_name = "master"// BUILD_NUMBER 是 Jenkins 的内置环境变量,代表当前构建的编号(递增)// 例如第一次构建为 1,第二次为 2,用于版本号控制}stages {stage('清空工作目录') {steps {echo '清理工作目录...'deleteDir() // 删除当前工作目录的所有内容}}stage('拉取代码'){steps{checkout([$class: 'GitSCM', branches: [[name: "*/${branch_name}"]],doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: "${git_auth}", url: "${git_address}"]]])}}stage('代码打包'){steps{sh "mvn -U clean package -Dmaven.test.skip=true"}}stage('传输Jar包到Docker主机') {steps {sh """scp -rp hwj-main/target/hwj-main.jar root@${docker_build_host}:/root/docker-build/hwj/"""}}stage('Docker主机构建镜像并推送仓库') {steps {script {sh """ssh root@${docker_build_host} 'cd /root/docker-build/hwj &&docker build -t harbor.local/k8s/hwj:v1.0.${BUILD_NUMBER} . &&docker push harbor.local/k8s/hwj:v1.0.${BUILD_NUMBER}'"""}}}stage('替换镜像并apply到K8s') {steps {script {sh """ssh root@${k8s_build_host} 'sed -i "s|image: harbor.local/k8s/hwj:.*|image: harbor.local/k8s/hwj:v1.0.${BUILD_NUMBER}|g" /root/kubernetes/zhsy/zhsy-deploy.yamlkubectl apply -f /root/kubernetes/hwj/hwj-deploy.yaml'"""}}}}
}

在这里插入图片描述

再次查看Pod状态,可以看到Pod已经更新,镜像版本变更为hwj:v1.0.8

kubectl describe pod -n cicd xxx

在这里插入图片描述


总结

🚀 本文详细介绍了在 Kubernetes 环境中,如何基于 Jenkins 搭建完整的自动化构建与部署流水线,涵盖从源代码拉取、Maven 构建、镜像制作、推送 Harbor 到 K8s 自动部署的全过程。
✅ 通过 SSH 免密 + 分层主机职责,将 Jenkins 的构建逻辑高效分发至 Docker 和 Kubernetes 节点,提升了系统可维护性与可扩展性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/79670.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《Windows 环境下 Qt C++ 项目升级 GCC 版本的完整指南》

Windows 环境下 Qt C++ 项目升级 GCC 版本的完整指南 在 Windows 系统中升级 Qt C++ 项目的 GCC 版本需要同时考虑 Qt 工具链、MinGW 环境以及项目配置的调整。以下是详细的升级步骤和注意事项: 一、升级前的准备工作 1. 确认当前环境 检查 Qt 版本(建议使用 Qt 5.15+ 以获…

【coze】故事卡片(图片、音频、文字)

【coze】故事卡片(图片、音频、文字) 1、创建智能体2、添加人设与回复逻辑3、添加工作流(1)创建工作流(2)添加大模型节点(3)添加提示词优化节点(4)添加豆包图…

Maven 依赖发布与仓库治理

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…

虚拟现实视频播放器 2.6.1 | 支持多种VR格式,提供沉浸式观看体验的媒体播放器

虚拟现实媒体播放器是一款专为在智能手机上播放VR(虚拟现实)照片和视频而设计的应用程序。它支持多种格式的影像内容,包括360和180等距矩形柱面、标准镜头和鱼眼镜头拍摄的照片和视频,并且兼容3D立体并排、上/下以及收缩媒体格式。…

ts axios中报 Property ‘code‘ does not exist on type ‘AxiosResponse<any, any>‘

ts语法有严格的格式,如果我们在处理响应数据时,出现了axios响应中非默认字段,就会出现标题那样的警告,我们可以通过创建axios.dt.ts解决这个问题 下面是我在开发中遇到的警告,code并不是axios默认返回的字段&#xff0…

tinyrenderer笔记(Shadow Mapping)

tinyrenderer个人代码仓库:tinyrenderer个人练习代码 前言 阴影是光线被阻挡的结果;当光源的光线由于其他物体的阻挡而无法到达物体表面时,该物体就会产生阴影。阴影能使场景看起来更真实,并让观察者获得物体之间的空间位置关系。…

debian中笔记本的省电选择auto-cpufreq

在reddit中,看评论区出现这个软件,于是打算尝试一下,应该能对不使用电源时笔记本的省电起到一定的作用。 https://github.com/AdnanHodzic/auto-cpufreq?tabreadme-ov-file#why-do-i-need-auto-cpufreq 作用 One of the problems with Linux…

Windows 查看电脑是否插拔过U盘

1、按 “WinR” 组合键打开 “运行” 对话框,输入 “regedit” 并回车,打开注册表编辑器。 2、依次展开HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USBSTOR注册表项,这里记录了所有已连接过的 USB 设备信息,包括 U 盘&am…

426、N叉树的层序遍历

输入检查: if not root:return [] 如果根节点为空,直接返回空列表 初始化: result [] queue collections.deque([root]) result用于存储最终结果queue初始化包含根节点,使用双端队列实现 主循环: while queue:leve…

【ES】Elasticsearch字段映射冲突问题分析与解决

在使用Elasticsearch作为搜索引擎时,经常会遇到一些映射(Mapping)相关的问题。本文将深入分析字段映射冲突问题,并通过原生的Elasticsearch API请求来复现和解决这个问题。 问题描述 在实际项目中,我们遇到以下错误: Transport…

小红书怎么看自己ip地址?小红书更改ip地址教学

在社交媒体高度透明的今天,小红书等平台公开用户IP属地的功能引发了广泛讨论。无论是出于隐私保护的担忧,还是因需要切换属地,许多用户都迫切想知道:能否通过手动修改“伪装”所在地? 事实上,IP属地可能影…

深入理解 Java 观察者模式:原理、实现与应用

在软件开发领域,设计模式堪称开发者智慧的凝练结晶,它们为解决各类常见编程难题提供了行之有效的方案。观察者模式(Observer Pattern)作为行为型设计模式的重要一员,在处理对象间依赖关系与事件通知方面表现卓越。本文…

网络原理 TCP/IP

1.应用层 1.1自定义协议 客户端和服务器之间往往进行交互的是“结构化”数据,网络传输的数据是“字符串”“二进制bit流”,约定协议的过程就是把结构化”数据转成“字符串”或“二进制bit流”的过程. 序列化:把结构化”数据转成“字符串”…

2025年5月HCIP题库(带解析)

某个ACL规则如下:则下列哪些IP地址可以被permit规则匹配: rule 5 permit ip source 10.0.2.0 0.0.254.255 A、10.0.4.5 B、10.0.5.6 C、10.0.6.7 D、10.0.2.1 试题答案:A;C;D 试题解析: 10.0.2.000001010.00000000.00000010.0000000…

【Redis | 基础总结篇 】

目录 前言: 1.Redis的介绍: 2.Redis的类型与命令: 3.Redis的安装: 3.1.Windows版本 3.2.Linux版本 4.在java中使用Redis: 4.1.介绍 4.2.Jedis 4.3.Spring Data Redis 前言: 本篇主要讲述了Redis的…

38.前端代码拆分

因为前端代码之前是一体编写的,所以为了方便对代码进行了拆分 之前是这样的: 为了更加规范,所以拆分成vue、util、store、api等部分: css: store: 拆分后的大致界面为: 其实还有点别扭需要后续再调整

tinyrenderer笔记(Shader)

tinyrenderer个人代码仓库:tinyrenderer个人练习代码 前言 现在我们将所有的渲染代码都放在了 main.cpp 中,然而在 OpenGL 渲染管线中,渲染的核心逻辑是位于 shader 中的,下面是 OpenGL 的渲染管线: 蓝色是我们可以自…

C++高性能内存池

目录 1. 项目介绍 1. 这个项目做的是什么? 2. 该项目要求的知识储备 2. 什么是内存池 1. 池化技术 2. 内存池 3. 内存池主要解决的问题 4.malloc 3. 先设计一个定长的内存池 4.高并发内存池 -- 整体框架设计 5. 高并发内存池 -- thread cache 6. 高并发内存池 -- …

LintCode407-加一,LintCode第479题-数组第二大数

第407题: 描述 给定一个非负数,表示一个数字数组,在该数的基础上1,返回一个新的数组。 该数字按照数位高低进行排列,最高位的数在列表的最前面. 样例 1: 输入:[1,2,3] 输出:[1,2,4] 样例 …

SMT贴片钢网精密设计与制造要点解析

内容概要 SMT贴片钢网作为电子组装工艺的核心载体,其设计与制造质量直接影响焊膏印刷精度及产品良率。本文系统梳理了钢网全生命周期中的15项关键技术指标,从材料选择、结构设计到工艺控制构建完整技术框架。核心要点涵盖激光切割精度的微米级调控、开口…