CI/CD—Jenkins實現自動構建Docker鏡像運行Java程序

實現原理

1、Java代碼中創建一個dockerfile文件 --> 2、代碼上傳至GitLab --> 3、Jenkins同步GitLab的代碼進行構建生成jar --> 4、Jenkins將jar包和dockerfile文件傳到測試服務器上 --> 5、在測試服務器上執行dockerfile構建jar鏡像 --> 6、鏡像構建完運行容器

一、環境準備

1、在測試服務器上安裝docker

參考之前的文章:

k8s集群部署_calico.v3.25.1.tar-CSDN博客?中的 ”二、安裝docker“ 步驟

2、環境驗證

 docker -v

?

二、編寫dockerfile文件并提交代碼

1、IDEA上創建一個docker目錄,目錄下編寫dockerfile

1.1、創建dockerfile文件
dockerfile文件內容:
#penjdk:17 作為基礎鏡像
FROM openjdk:17# 設置工作目錄
WORKDIR /root# 將當前目錄下的所有文件復制到容器的 /app 目錄下
COPY ./javafile/*.jar /root/HelloWorld.jar# 暴露端口(假設你的 Java 應用監聽 8080 端口)
EXPOSE 8989# 定義容器啟動時執行的命令
ENTRYPOINT ["java", "-jar", "/root/HelloWorld.jar"]

1.2、修改代碼

2、提交并合并代碼

3、查看編譯之后的dockerfile的位置

4、在構建步驟中配置復制dockerfile到遠程主機并運行的步驟

4.1、傳輸多個文件的解決方法

要實現多個目錄下的文件傳輸再添加一個Transfer Set

4.2、配置jar和dockerfile的傳輸路徑?
4.3、配置docker鏡像建命令如果進行多次發布的在構建前要刪除掉之前運行的容器和鏡像
#刪除掉之前運行的容器
docker rm -f $(docker ps |grep helloworld|awk '{print $1}')#刪除掉之前的鏡像以免對系統資源造成浪費
docker rmi -f helloworld#構建新的java鏡像
docker build -t helloworld .#運行容器
docker run -d --name helloworld -p 8989:8989 helloworld

5、構建報錯排查思路

5.1、構建出現報錯排查思路
解決思路:先模擬Jenkins自動部署的步驟在測試機器上手動運行,如果運行沒有問題,再排查是否是其他問題引起的。
排查步驟一:查看測試機器上排查jar和dockfile文件是否已經傳輸成功
文件已經成功上傳到測試服務器對應目錄下
排查步驟二:執行dockerfile構建命令
發現test用戶沒有docker命令的執行權限
解決方法:
chmod 666 /var/run/docker.sock
5.2、再次構建
5.3、結果為:Finished: UNSTABLE情況分析
“Finished: UNSTABLE” 常見于持續集成 / 持續部署(CI/CD)工具的構建或任務執行結果反饋中,如 Jenkins、GitLab CI/CD 等。它表示任務已完成,但處于 “不穩定” 狀態,這意味著構建過程雖然結束,但存在一些不符合預期的情況,不過尚未達到構建失敗的嚴重程度。具體的含義和排查方向因工具和使用場景而異:
  • 在 Jenkins 中
    • 測試用例部分失敗:構建過程包含測試環節時,如果部分測試用例失敗,而構建本身仍能成功完成,任務狀態就會是 “UNSTABLE”。例如,一個 Java 項目構建,在單元測試中,10 個測試用例有 8 個通過,2 個失敗,就會出現這種狀態。你需要查看 Jenkins 構建記錄中的測試報告,找到具體失敗的測試用例,檢查相關代碼邏輯。
    • 代碼質量問題:使用代碼質量檢查工具(如 Checkstyle、PMD 等)時,若代碼存在一些不符合規范的問題,構建也可能標記為 “UNSTABLE”。比如代碼中存在未使用的變量、過長的方法等。可以查看代碼質量檢查報告,按照規范修改代碼。
    • 構建過程有警告:構建過程中,構建腳本(如 Maven、Gradle 腳本)執行時出現警告信息,可能導致狀態不穩定。例如,Maven 依賴下載時出現警告,提示某些依賴版本可能存在兼容性問題。此時,要檢查構建腳本的輸出日志,處理警告信息,比如更新依賴版本。
  • 在 GitLab CI/CD 中
    • 部分作業失敗:如果一個 CI/CD 流水線包含多個作業(jobs),部分作業成功完成,部分作業失敗,整個流水線狀態可能是 “UNSTABLE”。比如一個流水線包含代碼編譯、測試、部署三個作業,編譯和測試成功,但部署作業因權限問題失敗。需要查看每個作業的詳細日志,定位失敗作業的問題,解決部署權限等問題。
    • 環境變量或配置問題:配置文件中的某些設置可能導致構建或部署過程不穩定。例如,在部署作業中,環境變量配置錯誤,使得應用部分功能無法正常初始化。要仔細檢查環境變量和配置文件,確保其正確性。

三、對自動構建結果進行測試

1、在測試機器上檢測運行的結果是否正常

步驟一:檢測目標文件是否成功上傳到測試機器上
步驟二:查看鏡像是否構建成功
步驟三:查看容器是否運行成功
步驟四:查看8989端口是都已經開啟
步驟五:訪問前端測試
瀏覽器上訪問url連接: http://192.168.72.132:8989/hello

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

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

相關文章

docker 搭建alpine下nginx1.26/mysql8.0/php7.4環境

docker 搭建alpine下nginx1.26/mysql8.0/php7.4環境 docker-compose.yml services:mysql-8.0:container_name: mysql-8.0image: mysql:8.0restart: always#ports:#- "3306:3306"volumes:- ./etc/mysql/conf.d/mysql.cnf:/etc/mysql/conf.d/mysql.cnf:ro- ./var/log…

隊列的簡單例題

題目如下 模擬隊列 首先你要明白隊列的話 只有隊尾才能進行新增,也就是入隊 只有隊首才能出隊,也就是刪除 隊首隊尾指針一開始默認都是0 相當于隊列中一開始是有一個元素的就是 0的位置 隊首指針head0 隊尾指針tail0 1.入隊也就是隊尾要先賦值&#xf…

vue3+elementuiplus的table表格動態高度

table表格流體高度 1、前提 了解自定義指令、hooks 2、核心思路 通過自定義指令(new ResizeObserver)監聽表格變化,然后通過hooks去更新表格高度。 3、核心代碼 src/directives/resize.ts // import { debounce } from /utils;import { t…

Apache POI詳解

目錄 前言 Apache POI是一個強大的Java庫,廣泛用于處理Microsoft Office文檔,包括Word、Excel和PowerPoint等。本文將詳細介紹如何使用Apache POI庫操作Word模板(包括替換占位符、操作表格)、將Word文檔轉換為PDF,以及…

AutoGen多角色、多用戶、多智能體對話系統

2023-03-11-AutoGen 使用【autoGenchainlitdeepSeek】實現【多角色、多用戶、多智能體對話系統】 1-核心思路 01)技術要點:autoGenchainlitdeepSeek02)什么是autoGen->autogen是微軟旗下的多智能體的框架03)什么是chainlit-&g…

問deepseek: OpenFOAM并行分區后,是如何實現ldumatrix矩陣向量乘法計算邏輯的?

在OpenFOAM中,lduMatrix 是用于存儲稀疏矩陣的類,支持并行計算。并行分區后,lduMatrix 的矩陣向量乘法通過以下步驟實現: 1. 矩陣分區 分區:將矩陣和向量分配到多個處理器上,每個處理器負責一部分。接口&…

數據類設計_圖片類設計之4_規則類圖形混合算法(前端架構)

前言 學的東西多了,要想辦法用出來.C和C是偏向底層的語言,直接與數據打交道.嘗試做一些和數據方面相關的內容 引入 接續上一篇,討論圖片類型設計出來后在場景中如何表達,以及圖片的混合算法.前面的內容屬于鋪墊和基礎,這篇內容和實際聯系起來了. 背景圖和前景圖 這里筆者想先…

【openwebui 搭建本地知識庫(RAG搭建本地知識庫)】

安裝準備 openwebui 這個本地安裝之前寫過使用python安裝。也可以直接用docker 命令 docker run --rm -d \-p 3080:8080 \-p 3081:8081 \-e WEBUI_AUTHtrue \-e DEFAULT_LOCALEcn \-e GLOBAL_LOG_LEVEL"INFO" \-e AIOHTTP_CLIENT_TIMEOUT100 \--privilegedtrue \-…

Nginx的流式響應配置詳解

現在大模型場景繁多,項目中涉及nginx轉發大模型的流式數據時,需配置nginx的轉發策略: location /streaming {proxy_pass http://backend_server;proxy_cache off; # 關閉緩存proxy_buffering off; # 關閉代理緩沖chunked_transfer_encoding …

git使用命令總結

文章目錄 Git 復制創建提交步驟Git 全局設置:創建 git 倉庫:已有倉庫? 遇到問題解決辦法:問題一先git pull一下,具體流程為以下幾步: 詳細步驟 Git 復制 git clone -b RobotModelSetting/develop https://gitlab.123/PROJECT/123.git創建提…

flutter 圖片資源路徑管理

1. 創建統一資源管理類 創建一個單獨的 Dart 文件(比如 manager.dart),將所有圖片路徑集中管理。這樣在引用圖片時,不需要每次都手動輸入完整路徑,只需通過常量引用即可。 //manager.dartclass Manager { static co…

Android Retrofit 框架配置與構建模塊深入源碼分析(六)

一、引言 Retrofit 是一個在 Android 和 Java 開發中廣泛使用的類型安全的 HTTP 客戶端。它通過簡潔的 API 設計,使得網絡請求的處理變得高效且易于管理。配置與構建模塊作為 Retrofit 的基礎部分,承擔著初始化和定制 Retrofit 實例的重要任務。開發者可…

80.Dictionary 字典 C#例子

使用 C# 中的 Dictionary 數據結構 在 C# 中&#xff0c;Dictionary<TKey, TValue> 是一個非常強大的數據結構&#xff0c;用于存儲鍵值對。它提供了高效的查找、插入和刪除操作&#xff0c;適用于需要快速訪問數據的場景。本文將通過一個簡單的示例&#xff0c;介紹如何…

tomcat負載均衡配置

這里拿Nginx和之前做的Tomcat 多實例來實現tomcat負載均衡 1.準備多實例與nginx tomcat單機多實例部署-CSDN博客 2.配置nginx做負載均衡 upstream tomcat{ server 192.168.60.11:8081; server 192.168.60.11:8082; server 192.168.60.11:8083; } ser…

C語言中scanf(“%c“,s)會出現的問題

scanf("%c%c", &word[0], &word[1]);的行為與輸入緩沖區的內容密切相關。你提到輸入ab后&#xff0c;word[0]是\n&#xff0c;這通常是因為輸入緩沖區中殘留了換行符&#xff08;\n&#xff09;。 一、原因分析 換行符殘留 若在輸入ab之前有其他輸入操作&a…

SealOS部署k8s集群(單節點)

一、 先決條件 每個集群節點應該有不同的主機名。需要在 K8s 集群的第一個 master 節點上運行 sealos run 命令。建議使用干凈的操作系統來創建集群。不要自己裝 Docker&#xff01;支持大多數 Linux發行版&#xff0c;但內核版本建議5以上。例如&#xff1a;Ubuntu、CentOS、…

Linux 服務器安全配置:密碼復雜度與登錄超時設置

Linux服務器安全配置指南:密碼復雜度與登錄超時設置 一、密碼復雜度設置 通過PAM模塊pam_cracklib.so實現密碼強度策略,配置文件: system-auth該文件主要用于定義系統范圍內的認證策略,涵蓋了用戶登錄、su 命令切換用戶、sudo 權限提升等多種認證場景。當用戶嘗試進行系…

AI Agent開發框架分析:前端視角

1. Mastra (https://mastra.ai/docs) 優點&#xff1a; 提供直觀的界面構建器&#xff0c;適合無代碼/低代碼開發支持JavaScript/TypeScript&#xff0c;可直接集成到前端項目可視化工作流設計&#xff0c;降低入門門檻內置多種UI組件&#xff0c;加速前端開發 缺點&#xf…

linux上使用unsloth微調大模型的環境踩坑之路-4070ti、4090

我們實驗室有2套環境 一套&#xff1a;4070ti。安裝了cuda12.4 一套&#xff1a;3張4090.安裝了cuda12.4 現在開始給第一套裝能運行unsloth能運行的環境 第一步&#xff1a;開始創建虛擬環境 conda create -n test_env python3.11 第二步&#xff1a;進入虛擬環境 conda activa…

網絡安全演練有哪些形式

OPENVAS使用 1、確定指定IP是否能ping通 2、創建掃描目標 3、創建掃描任務&#xff08;scan management →newtask&#xff09; 4、開始任務start 5、查看掃描細節 6、查看掃描結果&#xff0c;包含漏洞詳細信息&#xff0c;亦可到處PDF文件 7、導出掃描結果報告 8、為…