Jenkins 實現項目的構建和發布

作者:小凱
沉淀、分享、成長,讓自己和他人都能有所收獲!

本文的宗旨在于通過簡單干凈實踐的方式教會讀者,如何在 Docker 中部署 Jenkins,并通過 Jenkins 完成對項目的打包構建并在 Docker 容器中部署。

Jenkins 的主要作用是幫助你,把需要在本地機器完成的 Maven 構建、Docker 鏡像發布、云服務器部署等系列動作全部集成在一個服務下。簡化你的構建部署操作過程,因為 Jenkins 也被稱為 CI&CD(持續集成&持續部署) 工具。提供超過 1000 個插件(Maven、Git、NodeJs)來支持構建、部署、自動化, 滿足任何項目的需要。

官網:

英文:https://www.jenkins.io/(opens new window)
中文:https://www.jenkins.io/zh/(opens new window)

一、操作說明
本節給大家介紹 Jenkins 環境的安裝,以及以最簡單的方式配置使用 Jenkins 完成對 xfg-dev-tech-jenkins (opens new window)案例項目的部署。部署后可以訪問 xfg-dev-tech-jenkins (opens new window)項目提供的接口進行功能驗證。整個部署操作流程如下;
在這里插入圖片描述

  • 左側豎列為核心配置部署流程,右側是需要在配置過程中處理的細節。
  • 通過把本地對項目打包部署的過程拆解為一個個模塊,配置到 Jenkins 環境中。這就是 Jenkins 的作用。

二、環境配置
1.確保你已經在(云)服務器上配置了 Docker (opens new window)環境,以及安裝了 docker-compose。同時最好已經安裝了 Portainer (opens new window)管理界面這樣更加方便操作。
2.在配置和后續的驗證過程中,會需要訪問(云)服務的地址加端口。如果你在云服務配置的,記得開放端口;9000 - portainer、9090 - jenkins、8091 - xfg-dev-tech-app 服務

1. Jenkins 部署
1.1 上傳文件
在這里插入圖片描述

  • 如圖;以上配置內容已經放到 xfg-dev-tech-jenkins (opens new window)工程中,如果你是云服務器部署則需要將 dev-ops 部分全部上傳到服務器的根目錄下。
  • compose-down.sh 是 docker-compose (opens new window)下載文件,只有你安裝了 docker-compose 才能執行 docker-compose -f docker-compose-v1.0.yml up -d
  • jdk-down.sh 是 jdk1.8 下載路徑,以及解壓腳本。如果你在云服務器下載較慢,也可以本地搜索 jdk1.8 下載,并上傳到云服務器上解壓。注意:本步驟是可選的,如果你的項目不強依賴于 jdk1.8 也可以使用 Jenkins 默認自帶的 JDK17。可以通過在安裝后的 Jenkins 控制臺執行 which java 找到 JDK 路徑。
  • maven 下的 settings.xml 配置,默認配置了阿里云鏡像文件,方便在 Jenkins 構建項目時,可以快速地拉取下載下來包。

1.2 腳本說明

version: '3.8'
# 執行腳本;docker-compose -f docker-compose-v1.0.yml up -d
services:jenkins:image: jenkins/jenkins:2.439container_name: jenkinsprivileged: trueuser: rootports:- "9090:8080"- "50001:50000"volumes:- ./jenkins_home:/var/jenkins_home # 如果不配置到云服務器路徑下,則可以配置 jenkins_home 會創建一個數據卷使用- /var/run/docker.sock:/var/run/docker.sock- /usr/bin/docker:/usr/local/bin/docker- ./maven/conf/settings.xml:/usr/local/maven/conf/settings.xml # 這里只提供了 maven 的 settings.xml 主要用于修改 maven 的鏡像地址- ./jdk/jdk1.8.0_202:/usr/local/jdk1.8.0_202 # 提供了 jdk1.8,如果你需要其他版本也可以配置使用。environment:- JAVA_OPTS=-Djenkins.install.runSetupWizard=false # 禁止安裝向導「如果需要密碼則不要配置」docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPasswordrestart: unless-stoppedvolumes:jenkins_home:

Jenkins Docker 執行安裝腳本。

  • ./jenkins_home:/var/jenkins_home 是在云服務器端掛一個映射路徑,方便可以重新安裝后 Jenkins 依然存在。你也可以配置為 jenkins_home:/var/jenkins_home 這樣是自動掛在 volumes jenkins_home 數據卷下。
  • docker 兩個 docker 的配置是為了可以在 Jenkins 中使用 Docker 命令,這樣才能在 Docker 安裝的 Jenkins 容器內,使用 Docker 服務。
  • ./maven/conf/settings.xml:/usr/local/maven/conf/settings.xml 為了在 Jenkins 中使用映射的 Maven 配置。
  • ./jdk/jdk1.8.0_202:/usr/local/jdk1.8.0_202 用于在 Jenkins 中使用 jdk1.8
  • JAVA_OPTS=-Djenkins.install.runSetupWizard=false 這個是一個禁止安裝向導,配置為 false 后,則 Jenkins 不會讓你設置密碼,也不會一開始就安裝一堆插件。如果你需要安裝向導可以注釋掉這個配置。并且當提示你獲取密碼時,你可以執行;docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword 獲取到登錄密碼。

1.3 執行安裝
在這里插入圖片描述

[root@lavm-aqhgp9nber dev-ops]# docker-compose -f docker-compose-v1.0.yml up -d
[+] Building 0.0s (0/0)                                                                                                       
[+] Running 1/0? Container jenkins  Running 
  • 執行腳本 docker-compose -f docker-compose-v1.0.yml up -d 后,這樣執行完畢后,則表明已經安裝成功了💐。

2. 插件安裝
地址:http://localhost:9090/ (opens new window)- 登錄Jenkins
在這里插入圖片描述
在這里插入圖片描述

  • 1~2步,設置鏡像源,設置后重啟一下 Jenkins。 鏡像源地址:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
  • 3~4步,下載插件,先下載安裝 chinese 漢化插件,方便不太熟悉 Jenkins 的伙伴更好的知道頁面都是啥內容。
  • 5步,所有的插件安裝完成后,都需要重啟才會生效。安裝完 chinese 插件,重啟在進入到 Jenkins 就是漢化的頁面了
  • 除了以上步驟,你還需要同樣的方式安裝 maven、git、docker 插件。
  • 注意,因為網絡問題你可以再做過程中,提示失敗。沒關系,你可以再搜這個插件,再重新下載。它會把失敗的繼續下載。

3. 全局工具配置
地址:http://localhost:9090/manage/configureTools/(opens new window)
在這里插入圖片描述

  • 用于構建部署的 SpringBoot 應用的環境,都需要在全局工具中配置好。包括;Maven、JDK、Git、Docker。注意這里的環境路徑配置,如果配置了是會提示你沒有對應的路徑文件夾。

4. 添加憑證
地址:http://localhost:9090/manage/credentials/store/system/domain/_/(opens new window)

在這里插入圖片描述

  • 配置了Git倉庫的連接憑證,才能從Git倉庫拉取代碼。
  • 如果你還需要操作如 ssh 也需要配置憑證。

三、新建任務
一個任務就是一條構建發布部署項目的操作。

1. 配置任務
在這里插入圖片描述

xfg-dev-tech-jenkins

2. 配置Git
在這里插入圖片描述

# 你可以 fork 這個項目,到自己的倉庫進行使用
https://gitcode.net/KnowledgePlanet/ddd-scene-solution/xfg-dev-tech-content-moderation.git

3. 配置Maven
在這里插入圖片描述

  • 在高級中設置 Maven 配置的路徑 /usr/local/maven/conf/settings.xml。這樣才能走自己配置的阿里云鏡像倉庫。
clean install -Dmaven.test.skip=true

3. 配置Shell

# 先刪除之前的容器和鏡像文件
if [ "$(docker ps -a | grep xfg-dev-tech-app)" ]; then
docker stop xfg-dev-tech-app
docker rm xfg-dev-tech-app
fi
if [ "$(docker images -q xfg-dev-tech-app)" ]; then
docker rmi xfg-dev-tech-app
fi# 重新生成
cd /var/jenkins_home/workspace/xfg-dev-tech-jenkins/xfg-dev-tech-app
docker build -t xiaofuge/xfg-dev-tech-app .
docker run -itd -p 8091:8091 --name xfg-dev-tech-app xiaofuge/xfg-dev-tech-app

在這里插入圖片描述

  • 當你熟悉后還可以活學活用,比如這里只是做build 但不做run執行操作。具體的部署可以通過 docker compose 執行部署腳本。
  • 另外如果你有發布鏡像的訴求,也可以在這里操作。

四、測試驗證
1. 工程準備
工程:https://gitcode.net/KnowledgePlanet/road-map/xfg-dev-tech-jenkins 你可以fork到自己的倉庫進行使用,你的賬號密碼就是 CSDN 的賬號密碼。

@SpringBootApplication
@RestController()
@RequestMapping("/api/")
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class);}/*** http://localhost:8091/api/test*/@RequestMapping(value = "/test", method = RequestMethod.GET)public ResponseBodyEmitter test(HttpServletResponse response) {response.setContentType("text/event-stream");response.setCharacterEncoding("UTF-8");response.setHeader("Cache-Control", "no-cache");ResponseBodyEmitter emitter = new ResponseBodyEmitter();String[] words = new String[]{"嗨,臭寶。\r\n", "恭喜💐 ", "你的", " Jenkins ", " 部", "署", "測", "試", "成", "功", "了啦🌶!"};new Thread(() -> {for (String word : words) {try {emitter.send(word);Thread.sleep(250);} catch (IOException | InterruptedException e) {throw new RuntimeException(e);}}}).start();return emitter;}}
  • 工程中提供了接口;http://localhost:8091/api/test

2. CI&CD - 構建發布
地址:http://localhost:9090/job/xfg-dev-tech-jenkins/(opens new window)
在這里插入圖片描述

  • 點擊構建項目,最終會完成構建和部署成功。運行到這代表你全部操作完成了。

3. 驗證結果
地址:http://localhost:9000/#!/2/docker/containers(opens new window)
在這里插入圖片描述

訪問:http://localhost:8091/api/test(opens new window)
在這里插入圖片描述

  • 運行到這代表著你已經完整的走完了 Jenkins CI&CD 流程。

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

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

相關文章

Django接口自動化平臺實現(三)

3.2 后臺 admin 添加數據 1)注冊模型類到 admin: 1 from django.contrib import admin2 from . import models3 4 5 class ProjectAdmin(admin.ModelAdmin):6 list_display ("id", "name", "proj_owner", "tes…

CentOS 7 配置環境變量常見的4種方式

?博客主頁: https://blog.csdn.net/m0_63815035?typeblog 💗《博客內容》:.NET、Java.測試開發、Python、Android、Go、Node、Android前端小程序等相關領域知識 📢博客專欄: https://blog.csdn.net/m0_63815035/cat…

k8s:手動創建PV,解決postgis數據庫本地永久存儲

1.離線環境CPU:Hygon C86 7285 32-core Processor 操作系統:麒麟操作系統 containerd:1.7.27 Kubernetes:1.26.12 KubeSphere:4.1.2 kubekey:3.1.10 Harbor:2.13.1 Postgis:17-3.52創建StorageClass2.1創建 apiVersion: storage.k8s.io/v1kin…

谷歌瀏覽器Chrome的多用戶配置文件功能

谷歌瀏覽器Chrome的多用戶配置文件功能允許在同一設備上創建多個獨立賬戶,每個賬戶擁有完全隔離的瀏覽數據(如書簽、歷史記錄、擴展、Cookies等),非常適合工作/生活賬戶分離、家庭共享或臨時多賬號登錄場景。 如何使用Chrome的多用戶配置文件功能? 一、創建與切換用戶 1.…

傲軟錄屏 專業高清錄屏軟件 ApowerREC Pro 下載與保姆級安裝教程!!

小編今天分享一款強大的電腦屏幕錄像軟件 傲軟錄屏 ApowerREC,能夠幫助用戶錄制中電腦桌面屏幕上的所有內容,包括畫面和聲音,支持全屏錄制、區域錄制、畫中畫以及攝像頭錄制等多種視頻錄制模式,此外,還支持計劃任務錄制…

【計算機網絡】MAC地址與IP地址:網絡通信的雙重身份標識

在計算機網絡領域,MAC地址與IP地址是兩個核心概念,它們共同構成了數據傳輸的基礎。理解二者的區別與聯系,對于網絡配置、故障排查及安全管理至關重要。 一、基本概念 1. MAC地址(物理地址) 定義:固化在網絡…

如何用keepAlive實現標簽頁緩存

什么是KeepAlive首先,要明確所說的是TCP的 KeepAlive 還是HTTP的 Keep-Alive。TCP的KeepAlive和HTTP的Keep-Alive是完全不同的概念,不能混為一談。實際上HTTP的KeepAlive寫法是Keep-Alive,跟TCP的KeepAlive寫法上也有不同。TCP的KeepAliveTCP…

數據庫隔離級別

隔離級別決定了事務之間的可見性規則,直接影響數據庫的并發性能和數據一致性。SQL 標準定義了 4 種隔離級別,從低到高依次為:讀未提交→讀已提交→可重復讀→串行化。隔離級別越高,對并發問題的解決能力越強,但對性能的…

基于Python flask的電影數據分析及可視化系統的設計與實現,可視化內容很豐富

摘要:基于Python的電影數據分析及可視化系統是一個應用于電影市場的數據分析平臺,旨在為廣大電影愛好者提供更準確、更詳細、更實用的電影數據。數據分析部分主要是對來自貓眼電影網站上的數據進行清洗、分類處理、存儲等步驟,數據可視化則是…

TCP通訊開發注意事項及常見問題解析

文章目錄一、TCP協議特性與開發挑戰二、粘包與拆包問題深度解析1. 成因原理2. 典型場景與實例驗證3. 系統化解決方案接收方每次讀取10字節2. 丟包檢測與驗證工具3. 工程化解決方案四、連接管理關鍵實踐1. 超時機制設計2. TIME_WAIT狀態優化3. 異常處理最佳實踐五、高性能TCP開發…

2021 RoboCom 世界機器人開發者大賽-本科組(復賽)解題報告 | 珂學家

前言 題解 睿抗機器人開發者大賽CAIP-編程技能賽-歷年真題 匯總 2021 RoboCom 世界機器人開發者大賽-本科組(復賽)解題報告 感覺這個T1特別有意思,非典型題,著重推演下結論。 T2是一道玄學題,但是涉及一些優化技巧…

《計算機“十萬個為什么”》之 MQ

《計算機“十萬個為什么”》之 MQ 📨 歡迎來到消息隊列的奇妙世界! 在這篇文章中,我們將探索 MQ 的奧秘,從基礎概念到實際應用,讓你徹底搞懂這個分布式系統中不可或缺的重要組件!🚀 作者&#x…

Django母嬰商城項目實踐(七)- 首頁數據業務視圖

7、首頁數據業務視圖 1、介紹 視圖(View)是Django的MTV架構模式的V部分,主要負責處理用戶請求和生成相應的響應內容,然后在頁面或其他類型文檔中顯示。 也可以理解為視圖是MVC架構里面的C部分(控制器),主要處理功能和業務上的邏輯。我們習慣使用視圖函數處理HTTP請求,…

android 12 的 aidl for HAL 開發示例

說明:aidl for HAL 這種機制,可以自動生成java代碼,app調用可以獲取中間過程的jar包,結合反射調用 ServiceManager.getService 方法,直接獲取 HAL 服務,不再需要費力在framework層添加代碼,方便…

網絡安全滲透攻擊案例實戰:某公司內網為目標的滲透測試全過程

目錄一、案例背景二、目標分析(信息收集階段)🌐 外部信息搜集🧠 指紋識別和端口掃描三、攻擊流程(滲透測試全過程)🎯 步驟1:Web漏洞利用 —— 泛微OA遠程命令執行漏洞(CV…

AI視頻-劇本篇學習筆記

1.提示詞萬能框架是什么:ai扮演的角色做什么:解決什么問題怎么做:標準2、劇本模版假設你是一位擁有30年電影拍攝經驗的世界頂級導演,擁有豐富的電影拍攝經驗和高超的電影拍攝技術,同時也擅長各種影片的劇本創作。我需要你仔細閱讀…

A316-HF-DAC-V1:專業USB HiFi音頻解碼器評估板技術解析

引言 隨著高解析度音頻的普及,對高品質音頻解碼設備的需求日益增長。本文將介紹一款專為USB HiFi音頻解碼器設計的專業評估板——A316-HF-DAC-V1,這是一款基于XMOS XU316技術的高性能音頻解碼評估平臺。產品概述 A316-HF-DAC-V1是一款專業的USB HiFi音頻…

超低延遲RTSP播放器在工業機器人遠程控制中的應用探索

技術背景 在智能制造高速發展的今天,工業機器人已經從單一的生產作業工具,轉變為協作化、智能化的生產伙伴。無論是高精度的多關節機械臂、自主導航的移動機器人,還是與人協同工作的協作機器人,都越來越多地被應用于智能工廠、倉…

Elasticsearch Java 8.x 的聚合 API 及子聚合的用法

背景 Elasticsearch 版本發布的很勤, API 客戶端的用法各個版本之間差異也是很大。尤其是 Elasticsearch 8.x 版本直接廢棄了 RestHighLevelClient 對象。 Query 和 Aggregation 的 Builder 的用法也有變化。 本文記錄項目升級 Elasticsearch API 到 8.x 版本時聚合…

Dify功能熟悉

Dify功能熟悉 文章目錄Dify功能熟悉一、介紹1.1 快速開始1.2 官方文檔二、workflow2.1 開始和結束2.2 簡單示例三、節點3.1 節點一覽表3.2 節點-----開始3.3 節點-----LLM3.4 知識檢索(增強回答準確性)3.5 Agent智能體3.6 問題分類器3.7 http四、工具&am…