09-DevOps-Jenkins實現CI持續集成

前面已經把harbor搭建好了,也可以向harbor中推送自定義鏡像。

原計劃是在Jenkins這臺服務器上,完成鏡像構建,然后把鏡像推送的harbor倉庫中。現在改變計劃了,Jenkins所在的服務器(192.168.1.10)不負責鏡像構建工作,鏡像構建工作放到harbor所在的服務器(192.168.1.12)上完成。

這樣做的好處是,Jenkins的職責更加清晰,它只是為了完成流水線的事情(自動化工具)。

為了完成整個CI/CD的工作,在harbor所在的服務器上,完成自定義鏡像的構建及將鏡像推送至harbor鏡像倉庫。

實現后的架構如下圖:

docker配置鏡像地址

為了能夠在harbor所在的服務器(192.168.1.12)上完成鏡像的構建和推送。需要修改 /etc/docker/daemon.json 文件內容,把harbor鏡像倉庫地址配置進去。

修改后的文件內容如下:

{
"registry-mirrors": [
? ? "https://registry.docker-cn.com",
? ? "https://docker.1panel.live",
? ? "https://hub.rat.dev",
? ? "http://hub-mirror.c.163.com",
? ? "https://docker.mirrors.ustc.edu.cn",
? ? "https://kfwkfulq.mirror.aliyuncs.com",
? ? "https://k8s.m.daocloud.io"
],
"insecure-registries": ["192.168.1.12:85"]

}? ? ? ? ? ? ? ? ? ? ?

"insecure-registries":?["192.168.1.12:85"]是Docker守護進程配置文件daemon.json中的一項配置,用于指定Docker鏡像倉庫。

刷新配置,重啟docker

systemctl daemon-reload

systemctl restart docker

登錄harbor

docker login -u admin -p Harbor12345 192.168.1.12:85

如果出現這個錯誤,則將harbor容器移除,重新啟動一下容器

切換到harbor目錄

cd /usr/local/harbor

執行移除容器命令

docker-compose down

啟動harbor

./install.sh

再次登錄harbor,就成功了。

環境就搭建好了,下面開始配置Jenkins,將目標服務器(192.168.1.11)中的Dockerfile和程序包文件傳輸到harbor所在的服務器(192.168.1.12)。

配置Jenkins

新增SSH服務

點擊高級

填寫配置信息

接著配置當前的任務

在構建后操作的地方,增加新的服務器

第一段SSH Server配置如下圖所示:

在harbor所在服務器(192.168.1.12)上,完成鏡像的構建和推送鏡像到harbor倉庫的工作:

docker build -t 192.168.1.12:85/public/myproject:1.0 /usr/local/
docker login -u admin -p Harbor12345 192.168.1.12:85
docker push 192.168.1.12:85/public/myproject:1.0

命令解讀:

1.構建一個名稱為?192.168.1.12:85/public/myproject:1.0 的鏡像,Dockerfile文件在/usr/local/目錄。

2.登錄到harbor鏡像倉庫,用戶名admin? 密碼Harbor12345? harbor的ip為192.168.1.12,端口85。

3.將構建好的鏡像推送到harbor鏡像倉庫。

第二段SSH Server配置如下圖所示:

在目標服務器(192.168.1.11)上,完成容器的刪除和重新運行的工作。

docker rm -f myproject
docker run -d -p 81:81 --name=myproject 192.168.1.12:85/public/myproject:1.0

命令解讀:

1.刪除已經存在的名稱為?myproject 的容器。

2.生成名稱為?myproject 的容器,用到的鏡像名稱為?192.168.1.12:85/public/myproject:1.0,啟動的端口為81。

以上兩段配置的整體結構如圖:

在目標服務器(192.168.1.11)上,因為要拉取harbor服務器上的鏡像,所以要在docker中配置上遠程鏡像的地址。

操作方法是在/etc/docker/daemon.json文件中配置"insecure-registries":?["192.168.1.12:85"],這樣才能讓docker知道鏡像倉庫地址,否則docker無法拉取鏡像。

Jenkins重新構建

查看構建的控制臺輸出

構建成功。

在目標服務器(192.168.1.11)上,可以看到最新生成的容器。這個過程就是由Jenkins進行驅動的。

訪問應用程序

http://192.168.1.11:81/

復盤

回顧一下,到這一步為止,已經完成的事情:

1.搭建了GitLab代碼倉庫,將本地代碼提交到倉庫。【在192.168.1.10服務器完成】

2.從GitLab代碼倉庫中克隆代碼到Jenkins的工作區【在192.168.1.10服務器完成】

3.完成代碼的編譯和測試代碼【在192.168.1.10服務器完成】

4.打包Spring Boot應用【在192.168.1.10服務器完成】

5.通過SSH傳輸,將Spring Boot應用最終的jar包和Dockerfile文件,上傳到harbor所在的服務器(192.168.1.12)【在192.168.1.12服務器完成】

6.在harbor所在的服務器(192.168.1.12)完成自定義鏡像的構建及把鏡像推送至harbor鏡像倉庫【在192.168.1.12服務器完成】

7.在目標服務器(192.168.1.11)上從harbor鏡像倉庫中找到自定義的鏡像并完成容器啟動。【在192.168.1.11服務器完成】

當前的整體架構如下:

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

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

相關文章

Postman設置了Cookies但是請求不攜帶Cookie

1 問題說明 使用Postman工具往往要向本地服務器發送請求攜帶Cookie便于測試接口,但是在Send下面的Cookies選項中設置域名127.0.0.1,并添加Cookie,發現發送的請求怎么都不會攜帶Cookie: 通過Fiddler抓包發現并沒有Cookie&#xff1…

【unity】Vulkan模式下部分Android機型使用VideoPlayer組件播放視頻異常問題

一、問題背景 考慮到Vulkan高性能的優勢,項目組決定打包設置為vulkan優先,opengl es次之的方案;但由于部分低端設備或者部分模擬器對Vulkan的兼容性良莠不齊,導致諸如使用VideoPlayer組件無法正常播放視頻等問題頻發,而…

0802api設計和實戰-網絡ajax請求1-react-仿低代碼平臺項目

文章目錄 1 API設計1.1 用戶功能1.1.1 獲取用戶信息1.1.2 注冊1.1.3 登錄 1.2 問卷功能1.2.1 獲取單個問卷1.2.2 獲取問卷列表1.2.3 創建問卷1.2.4 更新問卷1.2.5 批量徹底刪除問卷1.2.6 復制問卷 1.3 小結 2 實戰2.1配置axios2.2 封裝API和測試2.3 新建問卷2.4 自定義hooks封裝…

Android Kotlin AIDL 完整實現與優化指南

本文將詳細介紹如何在Android中使用Kotlin實現AIDL(Android Interface Definition Language),并提供多種優化方案。 一、基礎實現 1. 創建AIDL文件 在src/main/aidl/com/example/myapplication/目錄下創建: IMyAidlInterface.…

【數據結構】_棧和隊列相關面試題

🔥 數據結構修煉場 🔥 💥 棧與隊列 終極試煉 💥 🚀 理論已加載完畢,代碼之魂覺醒時刻! ?? 是時候用實戰點燃你的算法之力了—— 「題目風暴,來襲!」 (握…

精益數據分析(8/126):從Airbnb案例看精益創業與數據驅動增長

精益數據分析(8/126):從Airbnb案例看精益創業與數據驅動增長 大家好!一直以來,我都堅信在創業和技術的領域里,持續學習與分享是不斷進步的關鍵。今天,咱們繼續深入學習《精益數據分析》&#x…

專題二十:路由策略與策略路由

一、路由策略 1.1 路由策略的概念 路由策略是通過修改路由表的路由條目來控制數據流量的可達性。即對接受和發布的路由進過濾。這種方式稱為路由策略 路由策略功能相關作用控制路由的發布可通過路由策略對所要發布的路由信息進行過濾,只允許發布滿足條件的路由信…

VSCode 擴展離線下載方法

學習自該文章,感謝作者! 2025 年 VSCode 插件離線下載攻略:官方渠道一鍵獲取 - 知乎 獲取擴展關鍵信息 方法一:官網獲取 打開 VSCode 擴展官方網站 搜索要下載的擴展,以 CodeGeeX 為例,網址為&#xf…

一 、環境的安裝 Anaconda + Pycharm + PaddlePaddle

《從零到一實踐:系統性學習生成式 AI(NLP)》 一 、環境的安裝 Anaconda Pycharm PaddlePaddle 1. Anaconda 軟件安裝 Anaconda 軟件安裝有大量的教程,此處不在說明,安裝完成之后界面如下: 2. 創建 Anaconda 虛擬環境 Paddl…

軟考教材重點內容 信息安全工程師 第23章 云計算安全需求分析與安全保護工程

23.1.云計算基本概念 云計算就是在這樣的需求驅動下而產生的一種計算模式。云計算通過虛擬化及網絡通信技術,提供一種按需服務、彈性化的 IT 資源池服務平臺。云計算的主要特征如下。 1. IT 資源以服務的形式提供 IT 資源以一種服務產品的形式提供,滿…

藍橋杯 19. 最大比例

最大比例 原題目鏈接 題目描述 X 星球的某個大獎賽設了 M 級獎勵。每個級別的獎金是一個正整數。 并且,相鄰兩個級別間的比例是一個固定值,也就是說:所有級別的獎金構成一個等比數列。 例如: 獎金數列為 16, 24, 36, 54&…

基于 Python 的自然語言處理系列(82):Transformer Reinforcement Learning

🔗 本文所用工具:trl、transformers、peft、bitsandbytes 📘 官方文檔參考:https://huggingface.co/docs/trl 一、引言:從有監督微調到 RLHF 全流程 隨著語言大模型的發展,如何在大規模預訓練模型基礎上更精…

JAVA猜數小游戲

import java.util.Random; import java.util.Scanner;public class HelloWorld {public static void main(String[] args) {Random rnew Random();int luck_number r.nextInt(100)1;while (true){System.out.println("輸入猜數字");Scanner sc new Scanner(System…

GPU渲染階段介紹+Shader基礎結構實現

GPU是什么 (CPU)Center Processing Unit:邏輯編程 (GPU)Graphics Processing Unit:圖形處理(矩陣運算,數據公式運算,光柵化) 渲染管線 渲染管線也稱為渲染流水線&#x…

Spring Boot + MyBatis 動態字段更新方法

在Spring Boot和MyBatis中,實現動態更新不固定字段的步驟如下: 方法一:使用MyBatis動態SQL(適合字段允許為null的場景) 定義實體類 包含所有可能被更新的字段。 Mapper接口 定義更新方法,參數為實體對象&…

單例模式:確保唯一實例的設計模式

單例模式:確保唯一實例的設計模式 一、模式核心:保證類僅有一個實例并提供全局訪問點 在軟件開發中,有些類需要確保只有一個實例(如系統配置類、日志管理器),避免因多個實例導致狀態混亂或資源浪費。 單…

UnoCSS原子CSS引擎-前端福音

UnoCSS是一款原子化的即時按需 CSS 引擎,其中沒有核心實用程序,所有功能都是通過預設提供的。默認情況下UnoCSS應用通過預設來實現相關功能。 UnoCSS中文文檔: https://www.unocss.com.cn 前有很多種原子化的框架,例如 Tailwind…

【Qwen2.5-VL 踩坑記錄】本地 + 海外賬號和國內賬號的 API 調用區別(阿里云百煉平臺)

API 調用 阿里云百煉平臺的海內外 API 的區別: 海外版:需要進行 API 基礎 URL 設置國內版:無需設置。 本人的服務器在香港,采用海外版的 API 時,需要進行如下API端點配置 / API基礎URL設置 / API客戶端配置&#xf…

C語言筆記(鵬哥)上課板書+課件匯總(結構體)-----數據結構常用

結構體 目錄: 1、結構體類型聲明 2、結構體變量的創建和初始化 3、結構體成員訪問操作符 4、結構體內存對齊*****(重要指數五顆星) 5、結構體傳參 6、結構體實現位段 一、結構體類型聲明 其實在指針中我們已經講解了一些結構體內容了&…

UV: Python包和項目管理器(從入門到不放棄教程)

目錄 UV: Python包和項目管理器(從入門到不放棄教程)1. 為什么用uv,而不是conda或者pip2. 安裝uv(Windows)2.1 powershell下載2.2 winget下載2.3 直接下載安裝包 3. uv教程3.1 創建虛擬環境 (uv venv) 4. uvx5. 此pip非…