Day119 持續集成docker+jenkins

Day119 docker+jenkins

1.Dockerfile

Dockerfile 可以用于項目部署。通過編寫 Dockerfile,可以將整個項目及其所需的依賴項打包到一個 Docker 鏡像中,然后在任何支持 Docker 的環境中部署和運行該鏡像

Dockerfile 是用于構建 Docker 鏡像的文本文件。它包含一系列的指令,用于描述如何從一個基礎鏡像構建一個新的鏡像,并在其中安裝和配置軟件環境

1.1 編寫Dockerfile

1.1.1 準備工作

1.idea中對springboot項目打包,生產一個jar文件

注意:先clean,再package

在這里插入圖片描述

2.jar文件上傳到Linux

在這里插入圖片描述

1.1.2 創建Dockerfile文件
vim dockerfile

在這里插入圖片描述

編寫dockerfile ,保存

FROM openjdk:8
MAINTAINER pcb
ADD FrameworkLearn-0.0.1-SNAPSHOT.jar /FrameworkLearn.jar  #前一個是打包之后的名字,后面一個是重命名的名字
EXPOSE 1002  #要和后端項目的一致
ENTRYPOINT ["java","-jar","/FrameworkLearn.jar"]   #重命名的jar名字

在這里插入圖片描述

1.1.3 構建鏡像 images
docker build -t demo1234:latest -f Dockerfile .

如果沒有安裝docker,就看Day95 docker安裝

1.1.4 查看創建的鏡像
docker images

在這里插入圖片描述

1.1.5 創建容器
docker run -id --name demo1234 -p 1002:1002 demo:latest   #:1002要和項目的端口一致,前面那個無所謂
docker ps
docker logs -f demo1234

1.2 文件詳解

1.2.1 Dockerfile 文件
FROM openjdk:8
MAINTAINER pcb
ADD FrameworkLearn-0.0.1-SNAPSHOT.jar /FrameworkLearn.jar  #前一個是打包之后的名字,后面一個是重命名的名字
EXPOSE 1002  #要和后端項目的一致
ENTRYPOINT ["java","-jar","/FrameworkLearn.jar"]   #重命名的jar名字

1.FROM openjdk:8 :指定基礎鏡像為 openjdk:8 ,表示該鏡像將以 OpenJDK 1.8 作為基礎環境

2.MAINTAINER pcb :設置鏡像的作者

3.ADD FrameworkLearn-0.0.1-SNAPSHOT.jar /FrameworkLearn.jar :將主機上的 FrameworkLearn-0.0.1-SNAPSHOT.jar 文件添加到鏡像中,并指定目標路徑為 FrameworkLearn.jar

4.EXPOSE 9999 :聲明容器將監聽的端口號為 9999,要和后端項目的一致

5.ENTRYPOINT [“java”,“-jar”,“/FrameworkLearn.jar”]:設置容器的入口點,指定在容器啟動時要運行的命令。這里的配置表示以 Java 命令執行 /FrameworkLearn.jar 文件,即運行主類為 /FrameworkLearn.jar 的 Java 應用程序

1.2.2 構建鏡像
docker build -t demo1234:latest -f Dockerfile .

-t 選項: 用于指定構建鏡像后的鏡像名稱和標簽,格式為 -t <鏡像名稱>:<標簽> ,可以自定義鏡像名稱和標簽

-f 選項: 用于指定要使用的 Dockerfile 文件

默認情況下, docker build 命令會在構建上下文中尋找名為 Dockerfile 的文件進行構建

使用 -f 選項可以指定其他名稱的 Dockerfile 文件,以便構建時使用不同的 Dockerfile

. 選項: 表示 Dockerfile 文件所在的路徑是當前路徑

2.Docker Compose

Docker Compose 是一個用于定義和管理多個 Docker 容器的工具。Docker Compose 提供了一種聲明性的方式來定義和管理多個 Docker 容器,從而實現服務編排。通過一個單獨的 YAML 文件,您可以定義各個服務的配置、依賴關系、網絡連接和卷掛載等信息

2.1 安裝

第一種:docker-compose離線安裝文件:docker-compose-linux-x86_64

下載地址:https://github.com/docker/compose/releases/download/v2.15.1/docker-compose-linux-x86_64

進入/usr/local/bin目錄,上傳文件,對文件重命名,然后賦予執行權限:

cd /usr/local/bin
mv docker-compose-linux-aarch64 docker-compose
sudo chmod +x docker-compose

查看docker-compose版本號:

docker-compose --version

第二種:sudo curl -L “https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-(uname?s)?(uname -s)-(uname?s)?(uname -m)” -o /usr/local/bin/docker-compose 安裝

設置權限 sudo chmod +x /usr/local/bin/docker-compose

在這里插入圖片描述

2.2 創建MySQL與Redis服務

目標:通過docker-compose創建MySQL與Redis容器

它允許用戶通過一個單獨的 docker-compose.yml 模板文件(YAML格式)來定義一組相關聯的應用容器為一個項目(project)

1.先創建文件:docker-compose.yml

vim docker-compose.yml

2.編寫文件(注意:格式縮進問題,yaml格式)

version: "3.0"services:mysqldb:image: mysql:8.0container_name: mysqlports:- "3306:3306"volumes:- /root/mysql/conf:/etc/mysql/conf.d- /root/mysql/logs:/logs- /root/mysql/data:/var/lib/mysqlenvironment:MYSQL_ROOT_PASSWORD: rootdepends_on:- redisredis:image: redis:6.2.7container_name: redis  ports:- "6379:6379"volumes:- /root/redis/data:/datacommand: redis-server

在這里插入圖片描述

3.運行文件

# 默認運行當前目錄下的 docker-compose.yml 文件;
# 如果 docker-compose.yml 文件不在當前目錄,可以使用 -f 選項指定文件路徑:
docker-compose up
# -d 將容器設置為在后臺運行
docker-compose up -d
# -f 指定文件名
docker-compose -f /path/to/docker-compose.yml up -d

在這里插入圖片描述

2.3 測試項目

1.創建一個 init.sql 文件,放在項目目錄下

2.創建文件:vim docker-compose-project.yml

version: "3.0"
services:mysql:image: mysql:8.0restart: alwayscontainer_name: mysql8.0command: --default-authentication-plugin=mysql_native_password  # 解決外部無法訪問volumes:- ./data:/var/lib/mysql #掛載目錄,持久化存儲- ./init.sql:/docker-entrypoint-initdb.d/init.sqlports:- "3306:3306" # 容器端口映射到宿主機的端口environment:MYSQL_ROOT_PASSWORD: 'root'   #設置密碼是root,賬號是rootMYSQL_ALLOW_EMPTY_PASSWORD: 'no'MYSQL_DATABASE: 'securityrabc'mydemo: # 自己單獨的springboot項目container_name: demohostname: jetbuild: ./  # 需要構建的Dockerfile文件ports:- "8080:8080"depends_on:- mysqlframeworklearn:image: openjdk:8-jdk-alpine # 使用Alpine版本的OpenJDK鏡像container_name: frameworklearnworking_dir: /root/pcb volumes:- ./FrameworkLearn-0.0.1-SNAPSHOT.jar:/root/pcb/FrameworkLearn-0.0.1-SNAPSHOT.jar command: ["java", "-jar", "/root/pcb/FrameworkLearn-0.0.1-SNAPSHOT.jar"] # 啟動命令ports:- "1002:1002"   # 容器端口映射到宿主機的端口depends_on: # web服務依賴mysql服務,要等mysql服務先啟動- mysql  

3.運行

docker-compose -f docker-compose-project.yml up -d

打印日志

docker-compose -f docker-compose-project.yml logs frameworklearn

注意: 服務器要開放1002端口

在這里插入圖片描述

代碼里面的yaml文件

server:# 服務端口port: 1002# 應用上下文路徑servlet:context-path: /FrameworkLearntomcat:uri-encoding: UTF-8spring:# 數據源配置(Druid)datasource:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverdruid:url: jdbc:mysql://mysql:3306/securityrabc?characterEncoding=utf-8 #修改為mysql:3306username: rootpassword: root

運行 http://47.108.146.63:1002/FrameworkLearn/test1

在這里插入圖片描述

3.CICD

3.1 概念

CICD:持續集成/持續發布—開發(git) --> git主庫 –> jenkins(git+jdk+tomcat+maven打包+測試)–> 發布到tomcat服務器

Jenkins是一個功能強大的應用程序,允許持續集成和持續交付項目,無論用的是什么平臺。這是一個免費的源代碼,可以處理任何類型的構建或持續集成。集成Jenkins可以用于一些測試和部署技術,Jenkins是一種軟件

3.2 CI / CD 方法簡介

軟件開發的連續方法基于自動執行腳本,以最大限度地減少在開發應用程序時引入錯誤的可能性。從新代碼的開發到部署,它們需要較少的人為干預甚至根本不需要干預

它涉及在每次小迭代中不斷構建,測試和部署代碼更改,從而減少基于有缺陷或失敗的先前版本開發新代碼的機會

這種方法有三種主要方法,每種方法都根據最適合您的策略進行應用。

持續集成( CI):代碼合并,構建,部署,測試都在一起,不斷地執行這個過程,并對結果反饋

持續部署(CD):部署到測試環境、預生產環境/灰度環境、生產環境

持續交付(CD):將最終產品發布到生產環境、給用戶使用

4.Jenkins 姐肯死

概述

Jenkins是幫我們將代碼進行統一的編譯打包、還可以放到tomcat容器中進行發布

我們通過配置,將以前:編譯、打包、上傳、部署到Tomcat中的過程交由Jenkins,Jenkins通過給定的代碼地址URL(代碼倉庫地址),將代碼拉取到其“宿主服務器”(Jenkins的安裝位置),進行編譯、打包和發布到Tomcat容器中

Jenkins目標

1.持續、自動地構建/測試軟件項目

2.監控軟件開放流程,快速問題定位及處理,提高開發效率

Jenkins特性

1.開源的java語言開發持續集成工具,支持CICD

2.易于安裝部署配置:可通過yum安裝或下載war包以及通過docker容器等快速實現安裝部署,可方便web界面配置管理

3.消息通知及測試報告:集成RSS/E-mail通過RSS發布構建結果或當構建完成時通過e-mail通知,生成JUnit測試報告

4.分布式構建:支持Jenkins能夠讓多臺計算機一起構建/測試

工作流程:

1.首先,開發人員將代碼提交到 Git 倉庫

2.然后 Jenkins 使用 Git 插件來拉取 Git 倉庫的代碼,然后配合 JDK、Maven 等軟件完成代碼編譯, 測試、審查、測試和打包等工作

3.最后 Jenkins 將生成的 jar/war 推送到 測試/生產 服務器 ,供用戶訪問

4.整套步驟下來,作為開發人員我們只需要提交下代碼,剩下的工作都交給了 Jenkins

在這里插入圖片描述

4.1 環境準備

安裝jdk、maven、git、docker、docker-compose

4.1.1 安裝jdk
yum install java-1.8.0-openjdk.x86_64
java -version

在這里插入圖片描述

4.1.2 安裝maven

下載 maven linux版本

https://maven.apache.org/download.cgi

在這里插入圖片描述

上傳到linux 下面的opt下面的soft ,解壓到/usr/local/

tar -xvf apache-maven-3.9.11-bin.tar.gz -C /usr/local

在這里插入圖片描述

配置maven倉庫,設置阿里鏡像倉庫

cd /usr/local
cd apache-maven-3.9.11
mkdir ck    #創建ck倉庫存儲目錄

在這里插入圖片描述

進入cd conf目錄,編輯 vi settings.xml文件

配置maven的倉庫位置

cd conf   # 進入conf目錄
vi settings.xml  # settings.xm文件<localRepository>/usr/local/apache-maven-3.9.11/ck</localRepository><mirror><id>alimaven</id><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url><mirrorOf>central</mirrorOf>
</mirror>

在這里插入圖片描述

在這里插入圖片描述

配置maven環境變量

vi /etc/profileexport MAVEN_HOME=/usr/local/apache-maven-3.6.3
export PATH=$PATH:$MAVEN_HOME/binsource /etc/profile #重新加載,使新增配置生效

在這里插入圖片描述

mvn -v

在這里插入圖片描述

4.1.3 安裝git
yum -y install git # 安裝
git version # 安裝是否成功

在這里插入圖片描述

4.2 安裝Jenkins

1.下載rpm文件:Index of jenkins-local/redhat,選擇合適的版本。這里我選擇了jenkins-2.344-1.1.noarch.rpm,因為低版本很多插件不支持,要更新版本

2.新建目錄存放安裝包

cd /optmkdir jenkins # 新建目錄rpm -ivh jenkins-2.344-1.1.noarch.rpm # 上傳.rpm文件之后,安裝

在這里插入圖片描述

3.查看Jenkins的相關目錄:rpm -ql jenkins

在這里插入圖片描述

4.修改配置文件 vim /usr/lib/systemd/system/jenkins.service

# 修改用戶和權限
User=root
Group=root# 修改JDK路徑
Environment="/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.462.b08-2.0.1.1.al8.x86_64/jre"  # 修改啟動端口
Environment="JENKINS_PORT=36080"

在這里插入圖片描述

在這里插入圖片描述

5.刷新配置文件 systemctl daemon-reload

6.開啟防火墻和指定端口

# 開啟防火墻
systemctl start firewalld
# 開放指定端口
firewall-cmd --zone=public --add-port=36080/tcp --permanent
# 重啟防火墻
firewall-cmd --reload
# 查看所有端口使用情況
netstat -ntlp   

7.服務器開放63080端口

在這里插入圖片描述

8.啟動Jenkins,訪問

# 啟動
systemctl start jenkins
# 停止
systemctl stop jenkins

9.啟動完成后,輸入服務器ip+端口訪問,初次訪問會有一個初始密碼

cat /var/lib/jenkins/secrets/initialAdminPassword #查看初始密碼

在這里插入圖片描述

注意:記得下載中文插件及設置密碼

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

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

相關文章

Vue3+Vite MPA多頁面應用開發完整指南 – 從零搭建到部署優化

什么是 MPA 多頁面應用 MPA&#xff08;Multi-Page Application&#xff09;是由多個獨立的 HTML 頁面組成的應用&#xff0c;每個頁面都有獨立的入口文件。與 SPA 不同&#xff0c;MPA 的每個頁面都是獨立的&#xff0c;頁面間通過鏈接跳轉&#xff0c;適合大型項目或需要 SE…

【企業級架構】企業戰略到技術落地的全流程【第一篇】

目錄 一、人生藍圖與企業羅盤&#xff1a;戰略視角下的成長架構 1. 大學畢業迷茫期 → 企業未制定戰略前&#xff1a;無方向、無目標? 2. 制定職業規劃 → 企業戰略制定&#xff1a;明確 “去哪” 和 “分幾步走”? 3. 盤點自身能力差距 → 業務架構梳理&#xff1a;搞清…

(二) Python + 地球信息科學與技術 = 經典案例分析

目錄 四、農業精準施肥與產量預測&#xff08;植被指數 機器學習&#xff09; 五、公共場所踩踏事故預警系統&#xff08;時空大數據 Web 開發&#xff09; 六、森林火災智能識別與救援路徑規劃&#xff08;遙感 路徑優化&#xff09; 七、海岸線侵蝕動態監測與防護&…

從需求到部署全套方案:餐飲服務許可證數據可視化分析系統的大數據技術實戰

&#x1f393; 作者&#xff1a;計算機畢設小月哥 | 軟件開發專家 &#x1f5a5;? 簡介&#xff1a;8年計算機軟件程序開發經驗。精通Java、Python、微信小程序、安卓、大數據、PHP、.NET|C#、Golang等技術棧。 &#x1f6e0;? 專業服務 &#x1f6e0;? 需求定制化開發源碼提…

Qt 關于QString和std::string數據截斷的問題- 遇到\0或者0x00如何處理?

Qt 關于QString和std::string數據截斷的問題- 遇到\0或者0x00如何處理&#xff1f;引言一、解決方案二、使用QByteArray注意事項引言 在Qt開發中&#xff0c;使用QString或std::string獲取、發送字符串時&#xff0c;遇到\0(空字符)或者0x00(十六進制表示)可能導致數據截斷&am…

Spring Cloud LoadBalancer 最佳實踐

Ribbon 曾經是 Spring Cloud 家族默認的客戶端負載均衡工具&#xff0c;而 Spring Cloud LoadBalancer (SCLB) 是官方替換 Ribbon 的新實現。表面上它們都解決 “服務調用時選哪個實例” 的問題&#xff0c;但在理念、架構和生態上差異不小。一、Ribbon vs SCLB1. 定位和生態…

【STM32】SPI 與 Flash 筆記

1?? SPI&#xff08;Serial Peripheral Interface&#xff0c;串行外設接口&#xff09;英文解釋&#xff1a; Serial&#xff1a;串行Peripheral&#xff1a;外設Interface&#xff1a;接口用途&#xff1a;MCU 與外部設備&#xff08;Flash、傳感器等&#xff09;高速數據通…

抽象工廠設計模式 Abstract Factory

抽象工廠抽象工廠設計模式是一種創建模式&#xff0c;它提供了一個用于創建相關或從屬對象族的接口&#xff0c;而無需指定其具體類。 它在以下情況下特別有用&#xff1a; 您需要創建必須一起使用并且是一致系列的一部分的對象&#xff08;例如&#xff0c;按鈕、復選框和菜單…

WSL 下的虛擬網卡配置

第一部分&#xff1a;Windows 虛擬網卡創建指南 1. 原理 在 Windows 里&#xff0c;“虛擬網卡”本質是由網絡驅動在系統網絡棧中創建的一個 軟件網卡接口。它的作用和物理網卡類似&#xff0c;只不過不直接連接到物理硬件&#xff0c;而是通過內核網絡驅動與宿主機網絡進行交換…

Dify web前端源碼本地部署詳細教程

目錄 1. 先啟動API 2. 啟動worker服務 3. 啟動web 4. 訪問登陸地址 在前面的文章中&#xff0c;Dify源碼部署&#xff0c;搭建二次開發環境&#xff08;一&#xff09; 已經記錄了如何在本地啟動API、work、中間件。在本篇文章中&#xff0c;將概述如何啟動dify web源碼項…

CVPR 2025|英偉達聯合牛津大學提出面向3D醫學成像的統一分割基礎模型

在 2D 自然圖像和視頻的交互式分割領域&#xff0c;基礎模型已引發廣泛關注&#xff0c;這也促使人們開始構建用于醫學成像的 3D 基礎模型。然而&#xff0c;3D 醫學成像存在的領域差異以及臨床應用場景&#xff0c;要求開發一種有別于現有 2D 解決方案的專用模型。具體而言&am…

解決“Win7共享文件夾其他電腦網絡無法發現共享電腦名稱”的問題

要讓運行 Windows 7 的電腦被局域網中其他設備&#xff08;包括另一臺電腦、手機、NAS 等&#xff09;“發現”&#xff0c;必須同時滿足三個條件&#xff1a; 網絡發現功能已啟用&#xff1b;對應的后臺服務已啟動&#xff1b;防火墻規則放行。 下面給出最簡、最穩妥的 3 步設…

Python pyzmq 庫詳解:從入門到高性能分布式通信

一、前言 在現代軟件開發中&#xff0c;進程間通信&#xff08;IPC&#xff09;與分布式系統通信已經成為基礎能力。無論是構建一個微服務架構的后端&#xff0c;還是實現大規模并行計算任務&#xff0c;如何讓不同的進程或節點之間高效地傳遞消息&#xff0c;都是核心問題。 傳…

CentOS 7更換國內鏡像源

第一步&#xff1a;檢查系統版本 在修改任何配置之前&#xff0c;先確定你的 CentOS 版本&#xff0c;因為不同版本的鏡像源配置文件不同。 cat /etc/redhat-release這個命令會顯示你的 CentOS 版本信息&#xff0c;例如 CentOS Linux release 7.9.2009 (Core)。從你的錯誤日志…

詳解 doclayout_yolo:Python 文檔布局檢測

目錄一、doclayout_yolo 核心功能二、安裝方法1. 直接安裝2. 通過 PDF-Extract-Kit 安裝三、使用示例1. 快速體驗&#xff08;HuggingFace Demo&#xff09;2. 本地推理代碼3. 批量處理四、技術亮點五、應用場景六、其他說明1.相關資源2. 注意事項doclayout_yolo 是一個基于 Y…

貓頭虎AI分享|一款Coze、Dify類開源AI應用超級智能體Agent快速構建工具:FastbuildAI

貓頭虎AI分享&#xff5c;一款 Coze、Dify 類開源 AI 應用超級智能體快速構建工具&#xff1a;FastbuildAI 區別在于它的易用度和商業閉環功能 摘要&#xff1a;FastbuildAI 是一個開源的 AI 應用“快速構建 商業化閉環”工具。它讓個人開發者與小團隊用 可視化 零代碼 的方…

GitLab 安全漏洞 CVE-2025-6186 解決方案

本分分享極狐GitLab 補丁版本 18.2.2, 18.1.4, 18.0.6 的詳細內容。這幾個版本包含重要的缺陷和安全修復代碼&#xff0c;我們強烈建議所有私有化部署用戶應該立即升級到上述的某一個版本。對于極狐GitLab SaaS&#xff0c;技術團隊已經進行了升級&#xff0c;無需用戶采取任何…

【K8s】harbor安裝與推送鏡像

引言 在開發中&#xff0c;先推送鏡像到docker&#xff0c;然后直接在docker運行。但是在K8S中&#xff0c;需要動態創建或者分配機器&#xff0c;這里需要將鏡像推送到harbor倉庫&#xff0c;然后再從倉庫拉取到每臺集群機器。 docker安裝harbor&#xff1a;https://learnku…

FPGA讀取AHT20溫濕度模塊思路及實現,包含遇到的問題(IIC協議)

一.閱讀官方手冊 手冊在下方網址下載&#xff0c;該模塊在各個網店平臺均有銷售 百度網盤 請輸入提取碼 手冊重點關注IIC地址&#xff08;讀地址0x71&#xff0c;寫地址0x70&#xff09;、IIC命令和讀寫數據邏輯&#xff0c;手冊寫的比較簡單&#xff08;感覺很多細節沒到位…

項目會議怎么開才有效

要提高項目會議的有效性&#xff0c;需要做到以下幾點&#xff1a;明確會議目的、制定具體的會議議程、合理控制會議時長、提前準備會議資料、選擇合適的參會人員、設定清晰的會議目標、確保會議有決策和行動方案、會后及時跟進與落實。其中&#xff0c;明確會議目的尤為重要。…