基于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.pswp.cn/pingmian/79670.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/79670.shtml
英文地址,請注明出處:http://en.pswp.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項關鍵技術指標,從材料選擇、結構設計到工藝控制構建完整技術框架。核心要點涵蓋激光切割精度的微米級調控、開口…