飛天使-學以致用-devops知識點4-SpringBoot項目CICD實現(實驗失敗,了解大概流程)

文章目錄

        • 代碼準備
          • 創建jenkins 任務
          • 測試推送
          • 使用項目里面的jenkinsfile 進行升級操作
      • 文字版本流程
        • 項目構建

代碼準備

推送代碼到gitlab
代碼去叩叮狼教育找 k8sk8s

創建jenkins 任務

創建一個k8s-cicd-demo 流水線任務

在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述

將jenkins 里面構建時候的地址還有token, 給到gitlab里面的webhooks 粘貼好
http://108.1.1.1:31861/project/k8s-cicd-demo
3b2976e09fb121a1d949c15289a87727
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

測試推送

在這里插入圖片描述
在這里插入圖片描述

使用項目里面的jenkinsfile 進行升級操作

任務構建里面選擇git 的http地址
在這里插入圖片描述
在這里插入圖片描述

創建harbor 憑據
在這里插入圖片描述

配置kubeconfig
管理Jenkins-> Managed files->Add->Custom file ->Content字段內容是kubeconfig(默認路徑在master節點/root/.kube/config–> cat /root/.kube/config)獲取內容

在這里插入圖片描述

文字版本流程

在這里插入圖片描述

配置流水線節點標簽
系統管理 > 節點管理 > 列表中 master 節點最右側的齒輪按鈕

修改標簽的值與項目中 Jenkinsfile 中 agent > kubernetes > label 的值相匹配

在首頁點擊 Create a Job 創建一個流水線風格的項目

----------- Jenkins 流水線項目 Webhook 配置 -----------
在 Jenkins 項目配置下找到構建觸發器欄目

勾選 Build when a change is pushed to GitLab. GitLab webhook URL: http://192.168.113.121:31216/project/k8s-cicd-demo

上方的 URL 就是用于配置到 gitlab 項目 webhook 的地址
生成的token也復制到gitlab 的webhook地址中去

啟用 Gitlab 構建觸發器:
Push Events:勾選,表示有任意推送到 git 倉庫的操作都會觸發構建
Opend Merge Request Events:勾選,表示有請求合并時觸發構建

點擊高級 > Secret Token > Generate 按鈕,生成 token

保存以上配置

----------- GitLab 項目 Webhook 配置 -----------
進入 GitLab 項目設置界面 > Webhooks

將上方 Jenkins 中的 URL 配置到 URL 處

將上方生成的 Secret Token 配置到 Secret 令牌

按照需求勾選觸發來源,這里我依然勾選 推送事件、合并請求事件

取消 SSL 驗證

點擊添加 webhook 按鈕,添加后可以點擊測試確認鏈接是否可以訪問

流水線:選擇定義為 Pipeline script from SCM 從遠程倉庫拉取 Jenkinsfile 配置
配置 SCM 為 Git
Repositories:
Repository URL:倉庫地址
Credentials:倉庫訪問的賬號密碼
Branches to build:選擇拉取哪個分支下的代碼
腳本路徑:Jenkinsfile 腳本文件名稱以及所在路徑

通過系統管理 > Manage Credentials > 憑據 > System > 全局憑證 > Add Credentials 添加 Username with password 類型憑證

填寫好用戶名密碼后,需要注意憑證 id 要與 Jenkinsfile 中的 DOCKER_CREDENTIAL_ID 一致

通過系統管理 > Manage Credentials > 憑據 > System > 全局憑證 > Add Credentials 添加 Username with password 類型憑證

填寫好用戶名密碼后,需要注意憑證 id 要與 Jenkinsfile 中的 GIT_CREDENTIAL_ID 一致

# 1. 事先安裝 Config File Provider 插件
# 2. 進入系統管理 > Mapped files > Add a new Config 添加配置文件
# 2.1 Type 選擇 Custom file 點擊 next
# 2.2 在 k8s master 節點執行 cat ~/.kube/config 查看文件內容,并將所有內容復制
# 2.3 將復制的內容貼到 Config file 的 Content 中后點擊 Submit 保存并提交
# 3. 復制保存后文件 id 到 Jenkinsfile 中的 KUBECONFIG_CREDENTIAL_ID 處# 1. 進入 SonarQube 系統,點擊右上角用戶頭像 > 我的賬號 進入設置頁面
# 2. 點擊 安全 > 填寫令牌名稱 > 點擊生成按鈕生成 token > 復制生成后的 token
# 3. 進入 jenkins 添加憑證管理頁面,添加 Secret Text 類型的憑證,將 token 貼入其中
# 4. 保證憑證 id 與 Jenkinsfile 文件中的 SONAR_CREDENTIAL_ID 一致# 1. 進入 SonarQube 管理頁面,點擊頂部菜單欄的配置 > 配置(小三角) > 網絡調用
# 2. 點擊右側創建按鈕創建新的 Webhook,并填寫名稱與地址
# 名稱:jenkins
# 地址:http://jenkins訪問ip:端口/sonarqube-webhook/
項目構建

方式一:在 Jenkins 管理后臺,進入項目中點擊立即構建進行項目構建

方式二:在開發工具中修改代碼,并將代碼提交到遠程倉庫自動觸發構建

在這里插入圖片描述

jenkinsfile代碼參考邏輯

pipeline {agent {node {label 'maven'}}stages {stage('clone code') {steps {container('maven') {git(url: 'http://108.1.1.1:28080/gitlab-instance-1a76a240/k8s-cicd-demo.git', credentialsId: 'git-user-pass', branch: '$BRANCH_NAME', changelog: true, poll: false)}}}stage('unit test') {steps {container('maven') {sh 'mvn clean test'}}}stage('sonarqube analysis') {agent nonesteps {withCredentials([string(credentialsId : 'sonarqube' ,variable : 'SONAR_TOKEN' ,)]) {withSonarQubeEnv('sonar') {container('maven') {sh '''mvn sonar:sonar -Dsonar.projectKey=$APP_NAME
echo "mvn sonar:sonar -Dsonar.projectKey=$APP_NAME"'''}}timeout(unit: 'MINUTES', activity: true, time: 5) {waitForQualityGate 'true'}}}}stage('build & push') {steps {container('maven') {sh 'mvn clean package -DskipTests'sh 'docker build -f Dockerfile -t $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:SNAPSHOT-$BUILD_NUMBER .'withCredentials([usernamePassword(credentialsId : 'harbor-user-pass' ,passwordVariable : 'DOCKER_PASSWORD' ,usernameVariable : 'DOCKER_USERNAME' ,)]) {sh '''echo "$DOCKER_PASSWORD" | docker login $REGISTRY -u "$DOCKER_USERNAME" --password-stdin
docker push $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:SNAPSHOT-$BUILD_NUMBER'''}}}}stage('push latest') {when {branch 'master'}steps {container('maven') {sh 'docker tag $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:SNAPSHOT-$BUILD_NUMBER $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:latest'sh 'docker push $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:latest'}}}stage('deploy to dev') {steps {container('maven') {input(id: 'deploy-to-dev', message: 'deploy to dev?')withCredentials([kubeconfigContent(credentialsId : 'kubeconfig-id' ,variable : 'ADMIN_KUBECONFIG' ,)]) {sh 'mkdir -p ~/.kube/'sh 'echo "$ADMIN_KUBECONFIG" > ~/.kube/config'sh '''sed -i\'\' "s#REGISTRY#$REGISTRY#" deploy/cicd-demo-dev.yaml
sed -i\'\' "s#DOCKERHUB_NAMESPACE#$DOCKERHUB_NAMESPACE#" deploy/cicd-demo-dev.yaml
sed -i\'\' "s#APP_NAME#$APP_NAME#" deploy/cicd-demo-dev.yaml
sed -i\'\' "s#BUILD_NUMBER#$BUILD_NUMBER#" deploy/cicd-demo-dev.yaml
kubectl apply -f deploy/cicd-demo-dev.yaml'''}}}}stage('push with tag') {agent nonewhen {expression {params.TAG_NAME =~ /v.*/}}steps {input(message: 'release image with tag?', submitter: '')withCredentials([usernamePassword(credentialsId : 'gitlab-user-pass' ,passwordVariable : 'GIT_PASSWORD' ,usernameVariable : 'GIT_USERNAME' ,)]) {sh 'git config --global user.email "liugang@wolfcode.cn" 'sh 'git config --global user.name "xiaoliu" 'sh 'git tag -a $TAG_NAME -m "$TAG_NAME" 'sh 'git push http://$GIT_USERNAME:$GIT_PASSWORD@$GIT_REPO_URL/$GIT_ACCOUNT/k8s-cicd-demo.git --tags --ipv4'}container('maven') {sh 'docker tag $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:SNAPSHOT-$BUILD_NUMBER $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:$TAG_NAME'sh 'docker push $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:$TAG_NAME'}}}stage('deploy to production') {agent nonewhen {expression {params.TAG_NAME =~ /v.*/}}steps {input(message: 'deploy to production?', submitter: '')container('maven') {sh '''sed -i\'\' "s#REGISTRY#$REGISTRY#" deploy/cicd-demo.yaml
sed -i\'\' "s#DOCKERHUB_NAMESPACE#$DOCKERHUB_NAMESPACE#" deploy/cicd-demo.yaml
sed -i\'\' "s#APP_NAME#$APP_NAME#" deploy/cicd-demo.yaml
sed -i\'\' "s#TAG_NAME#$TAG_NAME#" deploy/cicd-demo.yamlkubectl apply -f deploy/cicd-demo.yaml'''}}}}environment {REGISTRY = '108.1.1.1:8858'DOCKER_CREDENTIAL_ID = 'harbor-user-pass'GIT_REPO_URL = '108.1.1.1:28080'GIT_CREDENTIAL_ID = 'git-user-pass'KUBECONFIG_CREDENTIAL_ID = '804095f0-4bf5-4aed-b920-3f45a586bf52'DOCKERHUB_NAMESPACE = 'wolfcode'GITHUB_ACCOUNT = 'root'APP_NAME = 'k8s-cicd-demo'}parameters {string(name: 'BRANCH_NAME', defaultValue: 'master', description: '請選擇要發布的分支')string(name: 'TAG_NAME', defaultValue: 'snapshot', description: '標簽名稱,必須以 v 開頭,例如:v1、v1.0.0')}
}

參考資料:叩叮狼教育

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

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

相關文章

azure devops工具實踐分析

對azure devops此工具的功能深挖,結合jira的使用經驗的分析 1、在backlog的功能描述,可理解為需求項,這里包括了bug,從開發的角度修復bug也是個工作項,所以需求的范圍是真正的需求(開發接收到的已經確認的…

已解決org.springframework.web.multipart.MultipartException處理多部分請求異常的正確解決方法,親測有效!!!

已解決org.springframework.web.multipart.MultipartException處理多部分請求異常的正確解決方法,親測有效!!! 目錄 問題分析 出現問題的場景 報錯原因 解決思路 解決方法 總結 在Web開發過程中,我們經常需要處…

基于JAVA協同過濾算法網上海鮮水產推薦購物商城系統設計與實現(Springboot框架)可行性分析

博主介紹:黃菊華老師《Vue.js入門與商城開發實戰》《微信小程序商城開發》圖書作者,CSDN博客專家,在線教育專家,CSDN鉆石講師;專注大學生畢業設計教育和輔導。 所有項目都配有從入門到精通的基礎知識視頻課程&#xff…

【PDF技巧】網上下載的pdf文件怎么才能編輯

不知道大家有沒有遇到過網上下載的PDF文件不能編輯的情況,今天我們來詳細了解一下導致無法編輯的原因即解決方法有哪些。 第一種原因:PDF文件中的內容是否是圖片,如果確認是圖片文件,那么我們想要編輯,就可以先使用PD…

分享經典、現代以及前沿軟件工程課程

https://www.icourse163.org/course/PKU-1003177002 隨著信息技術的發展,軟件已經深入到人類社會生產和生活的各個方面。軟件工程是將工程化的方法運用到軟件的開發、運行和維護之中,以達到提高軟件質量,降低開發成本的目的。軟件工程已經成為…

第三方支付牌照出讓,具備何種優勢的買方容易成功

在支付牌照并購的過程中,選擇一個合適的并購方是至關重要的。基于多年的支付牌照公司股權并購居間經驗,我發現具備以下特質的并購方在并購過程中表現得較為靠譜,他們不僅使得并購過程更為順暢,還能顯著提高并購的成功率。 并購方…

字符函數和字符串函數(下)

個人主頁(找往期文章包括但不限于本期文章中不懂的知識點):我要學編程(?_?)-CSDN博客 目錄 strncpy函數的使用 函數原型: strncpy的使用 strncat函數的使用 函數原型: strncat的使用 strncmp函數的使用 函…

Vue3快速上手(十六)Vue3路由傳參大全

Vue3路由傳參 一、傳參的多種方式 1.1 拼接方式 這種方式適合傳遞單個參數的情況&#xff0c;比如點擊查看詳情&#xff0c;傳個id這樣的場景 傳參&#xff1a; <RouterLink to"/person?id1" active-class"active">person</RouterLink> …

Unity - 相機畫面為黑白效果

一、 在Hierarchy中創建一個Global Volume,并設置它為局部作用 二、 將場景出現的作用域范圍縮小至相機所在位置&#xff0c;將相機包含即可。 三、添加覆蓋組件Color Adjustments,并將Saturation直接拉為-100 。 此時&#xff0c;相機拍攝畫面為黑白&#xff0c;場景視圖中…

1、Linux-安裝

一、Linux和Windows的一些區別 1、Linux嚴格區分大小寫——【Windows創建文件夾時不區分大小寫】 2、Linux中所有內容都以文件形式存儲&#xff0c;包括硬件 3、Linux不靠拓展名區分文件類型&#xff0c;而是可以通過讀取文件開頭的一些字節來區分。 但是在實際使用中一般要…

MYSQL---日志

1.日志的概述 日志是MySQL數據庫的重要組成部分。日志文件中記錄著MySQL數據庫運行期間發生的變化&#xff1b;也就是說用來記錄MySQL數據庫的客戶端連接狀況、SQL語句的執行情況和錯誤信息等。當數據庫遭到意外的損壞時&#xff0c;可以通過日志查看文件出錯的原因&#xff0…

Leetcode算法題

用隊列實現棧 用隊列實現棧的四個操作&#xff1a; push(x)——元素x入棧pop()——移出棧頂元素top()——獲取棧頂元素empty()——返回棧是否為空 注意&#xff1a; 只能使用隊列的基本操作&#xff0c;即只可以調用隊列的push to back&#xff0c;pop from front&#xff…

C語言中的字符魔法:大小寫轉換的藝術

引言 在C語言的世界里&#xff0c;字符處理是一項基礎且重要的任務。字符作為編程中最基本的元素之一&#xff0c;承擔著信息展示、數據交互等多重角色。特別是在處理文本信息時&#xff0c;字符的轉換和識別顯得尤為重要。大小寫字母的轉換就是其中一個常見的需求&#xff0c…

電子電氣架構——汽車DoIP診斷通信建立流程

電子電氣架構——汽車DoIP診斷通信建立流程 我是穿拖鞋的漢子,魔都中堅持長期主義的工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 人們會在生活中不斷攻擊你。他們的主要武器是向你灌輸對自己的懷疑:你的價值、你的能力、你的潛力。他們往往會…

4款塞紙條盲盒交友源碼,可以對接公眾號

一元盲盒交友源碼/脫單盲盒源碼/交友盲盒/戀愛盲盒公眾號版 可以對接自己支付&#xff0c;全部自定義 沒有任何bug版本&#xff0c;已經測試完全可以 免費源碼&#xff0c;不包搭建指導 源碼下載地址專業知識分享社區-專業知識筆記免費分享 (chaobiji.cn)

華為OD機試 - 螺旋數字矩陣

1 題目描述 疫情期間&#xff0c;小明隔離在家&#xff0c;百無聊賴&#xff0c;在紙上寫數字玩。他發明了一種寫法&#xff1a; 給出數字個數 n &#xff08;0 < n ≤ 999&#xff09;和行數 m&#xff08;0 < m ≤ 999&#xff09;&#xff0c;從左上角的 1 開始&…

Globeland30米分辨率土地利用數據的下載

全國地理信息資源目錄服務系統 先注冊一下&#xff0c;登錄 點擊查詢

Yolo不改包代碼關閉控制臺推理日志

在預測的參數列表里加上verboseFalse結即可關閉控制臺輸出日志 model.predict(sourcecolor_image,showTrue,verboseFalse)

國內chatgpt寫作軟件,chatgpt國內使用

隨著人工智能技術的不斷發展&#xff0c;國內涌現出了一些基于ChatGPT模型的寫作軟件&#xff0c;這些軟件不僅能夠實現智能化的文章寫作&#xff0c;還支持批量生成各種類型的文章。本文將深入探討國內ChatGPT寫作軟件&#xff0c;以及它們在批量文章創作方面的應用與優勢。 C…

使用最新Hal庫實現USART中斷收發功能(STM32F4xx)

目錄 概述 1 認識STM32F4XX的USART 1.1 USART 功能說明 1.2 USART的中斷 1.3 USART 模式配置 1.4 USART的寄存器 2 使用STM32CubeMX 生成工程 2.1 配置參數 2.2 生成工程代碼 3 實現軟件功能 3.1 軟件功能介紹 3.2 認識USART Hal庫 3.2.1 初始化函數組 3.2.2 發送…