Jenkins與Kubernetes深度整合實踐

采用的非jenkins-slave方式

jenkins配置:

Jenkins添加k8s master節點的服務器信息

在Jenkins容器內部與k8s master節點設置免費登錄

# docker過濾查詢出運行的Jenkins服務
$ docker ps | grep jenkins# 進入Jenkins容器內部
$ docker exec -it jenkins-server /bin/bash# 在 /root/.ssh 目錄下生成了 id_rsa和id_rsa.pub,三次回車
$ ssh-keygen -t rsa# 進入生成秘鑰的目錄
$cd /root/.ssh/# 查看秘鑰文件
$ ls###免密
ssh-copy-id -i /root/.ssh/id_rsa.pub ssh root@192.168.95.101

在Springboot工程準備k8s yml部署文件和修改Jenkinsfile

######Jenkinsfilepipeline {// 指定任務再哪個集群節點中執行agent any// 聲明全局變量,方便后面使用environment {// harbor用戶名harborUserName = 'DevOps'// harbor密碼harborPassword = 'Dev12345'// harbor地址harborAddress = '192.168.95.131:9020'// harbor項目名harborRepo = 'repos'}stages {stage ('拉取git倉庫代碼') {steps {checkout([$class: 'GitSCM', branches: [[name: '${tag}']], extensions: [], userRemoteConfigs: [[credentialsId: 'b62b7b20-3b03-46e7-8f8b-09ab5efe0f12', url: 'http://192.168.95.130:8929/root/jenkins-publish-demo.git']]])}}stage ('通過maven構建項目') {steps {sh '/var/jenkins_home/maven/bin/mvn clean package -DskipTests'}}stage ('通過Sonarqube做質量檢測') {steps {sh '/var/jenkins_home/sonar-scanner/bin/sonar-scanner -Dsonar.projectname=${JOB_NAME} -Dsonar.projectKey=${JOB_NAME} -Dsonar.source=./ -Dsonar.java.binaries=./target/ -Dsonar.login=c8483abbf03c0fd4212ffce2c1e93c5ae8cd65bd'}}stage ('通過Docker制作自定義鏡像') {steps {sh '''cp -rf target/*.jar docker/docker build -t ${JOB_NAME}:$tag docker/'''}}stage ('將自定義鏡像推送到Harbor') {steps {sh '''docker login -u ${harborUserName} -p ${harborPassword} ${harborAddress}docker tag ${JOB_NAME}:${tag} ${harborAddress}/${harborRepo}/${JOB_NAME}:${tag}docker push ${harborAddress}/${harborRepo}/${JOB_NAME}:${tag}'''}}stage ('將yml文件傳到k8s-master上') {steps {sshPublisher(publishers: [sshPublisherDesc(configName: '192.168.95.101-k8s-master', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: 'jenkins-publish-demo.yml')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])}}}post {// 構建成功通知success {dingtalk (robot: 'Dingding-robot',type: 'MARKDOWN',title: "success: ${JOB_NAME}",text: ["- 構建成功: ${JOB_NAME}項目!\n- 版本: ${tag}\n" +"- 持續時間: ${currentBuild.durationString}\n- 任務:#${JOB_NAME}"])}// 構建失敗通知failure {dingtalk (robot: 'Dingding-robot',type: 'MARKDOWN',title: "fail: ${JOB_NAME}",text: ["- 構建失敗: ${JOB_NAME}項目!\n- 版本: ${tag}\n" +"- 持續時間: ${currentBuild.durationString}\n- 任務:#${JOB_NAME}"])}}
}
#####k8s.ymlapiVersion: apps/v1
kind: Deployment
metadata:name: springboot-demonamespace: default
spec:selector:matchLabels:app: springboot-demotemplate:metadata:labels:app: springboot-demospec:containers:- image: IMAGE_NAMEimagePullPolicy: IfNotPresentname: springboot-demoports:- containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:name: springboot-demonamespace: default
spec:selector:app: springboot-demotype: NodePortports:- protocol: TCPport: 8080targetPort: 8080name: myapp-http

Jenkinsfile增加遠程執行k8s master服務器執行流水線腳本步驟

// 所有的腳本命令都放在pipeline中
pipeline {// 指定任務再哪個集群節點中執行agent any// 聲明全局變量,方便后面使用environment {// harbor用戶名harborUserName = 'DevOps'// harbor密碼harborPassword = 'Dev12345'// harbor地址harborAddress = '192.168.95.131:9020'// harbor項目名harborRepo = 'repos'}stages {stage ('拉取git倉庫代碼') {steps {checkout([$class: 'GitSCM', branches: [[name: '${tag}']], extensions: [], userRemoteConfigs: [[credentialsId: 'b62b7b20-3b03-46e7-8f8b-09ab5efe0f12', url: 'http://192.168.95.130:8929/root/jenkins-publish-demo.git']]])}}stage ('通過maven構建項目') {steps {sh '/var/jenkins_home/maven/bin/mvn clean package -DskipTests'}}stage ('通過Sonarqube做質量檢測') {steps {sh '/var/jenkins_home/sonar-scanner/bin/sonar-scanner -Dsonar.projectname=${JOB_NAME} -Dsonar.projectKey=${JOB_NAME} -Dsonar.source=./ -Dsonar.java.binaries=./target/ -Dsonar.login=c8483abbf03c0fd4212ffce2c1e93c5ae8cd65bd'}}stage ('通過Docker制作自定義鏡像') {steps {sh '''cp -rf target/*.jar docker/docker build -t ${JOB_NAME}:$tag docker/'''}}stage ('將自定義鏡像推送到Harbor') {steps {sh '''docker login -u ${harborUserName} -p ${harborPassword} ${harborAddress}docker tag ${JOB_NAME}:${tag} ${harborAddress}/${harborRepo}/${JOB_NAME}:${tag}docker push ${harborAddress}/${harborRepo}/${JOB_NAME}:${tag}'''}}stage ('將yml文件傳到k8s-master上') {steps {sshPublisher(publishers: [sshPublisherDesc(configName: '192.168.95.101-k8s-master', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: 'jenkins-publish-demo.yml')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])}}stage ('遠程執行k8s-master的kubectl命令') {steps {sh 'ssh root@192.168.95.101 kubectl apply -f /usr/local/deploy/k8s/jenkins-publish-demo.yml'}}}post {// 構建成功通知success {dingtalk (robot: 'Dingding-robot',type: 'MARKDOWN',title: "success: ${JOB_NAME}",text: ["- 構建成功: ${JOB_NAME}項目!\n- 版本: ${tag}\n" +"- 持續時間: ${currentBuild.durationString}\n- 任務:#${JOB_NAME}"])}// 構建失敗通知failure {dingtalk (robot: 'Dingding-robot',type: 'MARKDOWN',title: "fail: ${JOB_NAME}",text: ["- 構建失敗: ${JOB_NAME}項目!\n- 版本: ${tag}\n" +"- 持續時間: ${currentBuild.durationString}\n- 任務:#${JOB_NAME}"])}}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/912030.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/912030.shtml
英文地址,請注明出處:http://en.pswp.cn/news/912030.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

GraphQL API-1

簡介 判斷GraphQL方式 判斷一個網站是否使用了GraphQL API,可以通過以下幾種方法: 1. 檢查網絡請求 查看請求端點 GraphQL 通常使用單一端點,常見路徑如: /graphql/api/graphql/gql/query 觀察請求特征 POST 請求為主&…

推薦C++題目練習網站

LeetCode LeetCode是一個全球知名的編程練習平臺,提供大量C題目,涵蓋數據結構、算法、系統設計等。題目難度從簡單到困難,適合不同水平的學習者。平臺支持在線編寫代碼并即時運行測試,提供詳細的題目討論區和官方解答。 Codeforc…

Spring Cloud 微服務(服務注冊與發現原理深度解析)

📌 摘要 在微服務架構中,服務注冊與發現是整個系統運行的基礎核心模塊。它決定了服務如何被定位、調用和管理。 本文將深入講解 Spring Cloud 中 Eureka 的服務注冊與發現機制,從底層原理到源碼分析,再到實際開發中的最佳實踐&a…

【Linux 設備模型框架 kobject 和 kset】

Linux 設備模型框架 kobject 和 kset 一、Linux 設備模型概述二、kobject 與 kset 的核心概念1. kobject2. kset3. 關鍵數據結構 三、kobject 與 kset 的實現源碼四、源碼解析與使用說明1. kset 的創建與初始化2. kobject 的創建與屬性3. sysfs 屬性操作4. 用戶空間訪問示例 五…

一起學前端之HTML------(1)HTML 介紹

HTML 介紹 HTML 即超文本標記語言(HyperText Markup Language),它是構成網頁的基礎技術之一。HTML 借助各種標簽(Tag)對網頁的結構與內容加以描述。下面為你介紹其核心要點: 關鍵特性 標簽結構&#xff…

整體遷移法遷移 Docker 鏡像

docker添加了新的鏡像數據盤,數據盤遷移步驟 使用整體遷移法遷移 Docker 鏡像后,可以在確認遷移成功且新數據盤正常使用后,刪除舊數據目錄來釋放空間1。 # 停止 Docker 服務 sudo systemctl stop docker # 停止 socket 監聽器 sudo systemct…

智能IDE+高效數據采集,讓數據獲取接近0門檻

亮數據也有了自己的官方賬號,大家可以關注:https://brightdata.blog.csdn.net/ 現在正有福利,有興趣的伙伴可以訪問鏈接: https://www.bright.cn/products/web-scraper/?utm_sourcebrand&utm_campaignbrnd-mkt_cn_csdn_jhx…

GNSS位移監測站在大壩安全中的用處

一、實時監測大壩變形 整體位移監測 GNSS(全球導航衛星系統)位移監測站能夠實時、連續地獲取大壩在三維空間中的位置信息,包括水平位移和垂直位移。大壩在長期運行過程中,受到水壓力、溫度變化、地基沉降等多種因素的影響&#x…

數字圖像處理(一):從LED冬奧會、奧運會及春晚等等大屏,到手機小屏,快來挖一挖里面都有什么

數字圖像處理(一) 一、什么是圖像:圖像就是多維數組圖像的存儲每一個格子有自己的顏色、深淺如何訪問圖像:1.對于RGB圖像,共有R/G/B三個通道,通過代碼來看。圖像有單通道和多通道之分,訪問時只需…

關于漢語和英語哪個更先進、歷史更久的爭論

引言:熱議背后的思考? ? 在全球化浪潮的推動下,英語作為國際通用語言,在世界范圍內廣泛傳播,其在國際商務、科技交流、學術研究等領域占據著重要地位。而漢語,作為世界上使用人口最多的語言之一,承載著…

在不聯網的情況下,從可以聯網的計算機上拷貝過來的程序報錯:nu1301 無法加載源,https://api.nuget.org/v3/index.json

解決方法: 在聯網的計算機上,找到nuget文件,拷貝到,不能聯網的計算機的相應位置 設置加載這個nuget包,把nuget.org取消。 注意如果出現好多包都不能加載,可能是框架版本的問題,修改框架版本&am…

TCP 狀態流程及原理詳解:從連接建立到性能優化

一、TCP 協議概述與核心價值 TCP(Transmission Control Protocol,傳輸控制協議)是互聯網協議棧中的核心協議之一,為網絡通信提供可靠的、面向連接的數據傳輸服務。在當今復雜多變的網絡環境中,深入理解 TCP 協議的狀態…

【STM32 學習筆記】PWR電源控制

在電子設備中,待機(Standby)和睡眠(Sleep)是兩種不同的省電模式。 1. 待機模式(Standby Mode):在待機模式下,設備仍然保持一定程度的活動,但大部分功能處于暫…

TCP 重傳機制詳解:原理、變體與故障排查應用

一、TCP 重傳機制基礎原理 1.1 可靠傳輸的核心保障 TCP(Transmission Control Protocol,傳輸控制協議)作為互聯網中最常用的傳輸層協議,其核心特性之一是提供可靠的數據傳輸服務。在不可靠的網絡環境中,數據包可能會…

Linux-HTTP服務和APACHE-學習筆記

序 欠10年前自己的一份筆記,獻給今后的自己。 Internet Internet與中國 Internet最早來源于美國國防部高級研究計劃局ARPA建立的ARPANet,1969年投入運行。1983年,ARPAnet分裂為兩部分:ARPAnet和純軍事用的MILNET。當年1月&…

GitHub 趨勢日報 (2025年06月26日)

📊 由 TrendForge 系統生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日報中的項目描述已自動翻譯為中文 📈 今日獲星趨勢圖 今日獲星趨勢圖 716 free-for-dev 677 Self-Hosting-Guide 618 Best-websites-a-programmer-shoul…

利用TACCO將單細胞注釋transfer至空間組

目錄 環境導入 關鍵函數定義 運行前設定 數據準備 正式運行與保存 可視化與概率調整 偶然發現的一個好用的transfer方法,計算效率相當高,解了我的燃眉之急hh 原方法來自由以色列耶路撒冷希伯來大學的Mor Nitzan、美國麻省理工學院-哈佛大學博德研…

在反向代理環境下精準獲取客戶端真實 IP 的最佳實踐

目錄 1 背景 2 常見誤區 3 X-Forwarded-For 解析規則 4 real_ip() 函數 —— 一行代碼落地 5 與框架方法的協同 6 Nginx 端最小配置 7 生產落地 checklist 8 常見 Q&A 9 總結 在反向代理環境下精準獲取客戶端真實 IP 的最佳實踐 — 基于自定義 real_ip() 函數的完…

華為云Flexus+DeepSeek征文|基于Dify構建抓取金融新聞并發送郵箱工作流

華為云FlexusDeepSeek征文|基于Dify構建抓取金融新聞并發送郵箱工作流 一、構建抓取金融新聞并發送郵箱工作流前言二、構建抓取金融新聞并發送郵箱工作流環境2.1 基于FlexusX實例的Dify平臺2.2 基于MaaS的模型API商用服務 三、構建抓取金融新聞并發送郵箱工作流實戰…

疲勞檢測與行為分析:工廠智能化實踐

視覺分析算法賦能工廠疲勞與安全管理 一、背景與需求 在制造業中,疲勞作業是導致安全事故和效率下降的核心因素之一。傳統人工巡檢存在覆蓋面不足、響應滯后等問題,而基于視覺分析的智能監控系統通過多算法協同,可實現全天候、高精度的疲勞…