Jenkins中自動化部署Spring?Boot項目的全過程
準(zhǔn)備工作
本文將介紹如何使用 Jenkins 從倉庫中拉取項目,經(jīng)過打包、構(gòu)建鏡像、運行容器等步驟,最終將 Spring Boot 項目部署到服務(wù)器上供用戶訪問。并且當(dāng)項目有更新時,自動觸發(fā) Jenkins 任務(wù),實現(xiàn)自動化部署。
在開始之前,需要先創(chuàng)建一個 Spring Boot 項目,提供一些測試的接口。在確保項目正常運行的情況下,將項目推送到 Git 遠(yuǎn)程倉庫。
Spring Boot 項目文件目錄結(jié)構(gòu):

Dockerfile 文件內(nèi)容:
FROM bellsoft/liberica-openjdk-debian:17.0.11-cds
LABEL maintainer="hayden"
RUN mkdir -p /demo/server/logs \
/demo/server/temp
WORKDIR /demo/server
ENV SERVER_PORT=8080 LANG=C.UTF-8 LC_ALL=C.UTF-8 JAVA_OPTS="-Xms512m -Xmx512m"
EXPOSE ${SERVER_PORT}
ADD ./target/demo.jar ./app.jar
ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -Dserver.port=${SERVER_PORT} \
-XX:+HeapDumpOnOutOfMemoryError -XX:+UseZGC ${JAVA_OPTS} \
-jar app.jar
啟動 Jenkins
使用 docker-compose 構(gòu)建 Jenkins 容器。
文件樹結(jié)構(gòu):
.
├── docker-compose.yml
└── jenkins
├── jenkins_config
└── jenkins_home
docker-compose.yml 文件內(nèi)容:
version : '3.0.01'
services:
jenkins:
container_name: jenkins
image: jenkins/jenkins:lts-jdk17
restart: unless-stopped
ports:
- "10000:8080"
volumes:
# 數(shù)據(jù)卷掛載路徑設(shè)置,將本機目錄映射到容器目錄 (下面映射可在容器中執(zhí)行宿主機docker命令)
- "/usr/bin/docker:/usr/bin/docker"
- "/var/run/docker.sock:/var/run/docker.sock"
- "/usr/lib64/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7"
# - "/usr/local/bin/docker-compose:/usr/local/bin/docker-compose" # 無效
- "./jenkins/jenkins_home:/var/jenkins_home"
# ThinBackup插件備份jenkins配置存儲目錄
- "./jenkins/jenkins_config:/var/jenkins_config"
# 解決jenkins安裝插件報錯: An error occurred during installation: No such plugin: cloudbees-folder
# 下載地址 http://ftp.icm.edu.pl/packages/jenkins/plugins/cloudbees-folder/
# - "./jenkins/jenkins_home/war/META-INF/detached-plugins/cloudbees-folder.hpi:/var/jenkins_home/war/META-INF/detached-plugins/cloudbees-folder.hpi"
environment:
TZ: Asia/Shanghai
LANG: en_US.UTF-8
JAVA_OPTS: -Xmx512M -Xms512M -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:MaxNewSize=128m -Djava.util.logging.config.file=/var/jenkins_home/log.properties -Duser.timezone=Asia/Shanghai
user: root # 使用root權(quán)限運行容器(docker中通過`-u root`命令)
啟動 Jenkins 容器:
docker-compose up -d jenkins
開放 10000 端口,允許外部訪問:
firewall-cmd --zone=public --add-port=10000/tcp --permanent firewall-cmd --reload
配置 Jenkins
在瀏覽器中輸入 http://[ip]:10000 訪問 Jenkins。經(jīng)過一系列設(shè)置,完成 Jenkins 的初始化。
在系統(tǒng)管理->全局工具配置中配置 JDK,以 JDK 17 為例:
安裝 URL:https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz

在系統(tǒng)管理->全局工具配置中配置 Maven,以 Maven 3.9 為例:

下載完 Maven 后還需要修改鏡像地址,避免出現(xiàn)下載速度過慢的問題:
# 進(jìn)入 Maven 配置文件目錄 cd jenkins/jenkins_home/tools/hudson.tasks.Maven_MavenInstallation/ # 編輯配置文件 vim maven-3.9.9/conf/settings.xml # 替換原鏡像地址 <mirror> <id>alimaven</id> <name>aliyun maven</name> <url>https://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror>
::: tip 注意
使用 Jenkins 的安裝方式中,會將軟件安裝到對應(yīng)目錄的下一層目錄,例如 JDK 安裝
到 jenkins/jenkins_home/tools/hudson.model.JDK/jdk-17/jdk-17.0.12,導(dǎo)致出現(xiàn)找不到 JDK 的問題。
解決方法:來到對應(yīng)的目錄中,將 JDK 的目錄移動到上一層目錄即可。
cd jenkins/jenkins_home/tools/hudson.model.JDK/jdk-17 mv jdk-17.0.12/* . rm -rf jdk-17.0.12
:::
創(chuàng)建及配置任務(wù)
在 Jenkins 主頁點擊新建任務(wù),選擇構(gòu)建一個 maven 項目,點擊確定:

源碼管理
在源碼管理中選擇 Git,填寫倉庫地址、憑證、分支等信息:

構(gòu)建觸發(fā)器
在構(gòu)建觸發(fā)器中選擇 Generic Webhook Trigger,填寫 Token,點擊應(yīng)用:


這時來到 Git 遠(yuǎn)程倉庫的 Webhook 配置頁面,填寫 Jenkins URL 和 Token,點擊添加:
URL 格式:http://[ip]:10000/generic-webhook-trigger/invoke?token=Token


構(gòu)建
由于 pom.xml 在項目根目錄下,所以這邊默認(rèn)使用 pom.xml 進(jìn)行構(gòu)建:

構(gòu)建后操作
勾選 Run only if build succeeds,填寫 Shell 腳本:
# 刪除舊容器 docker rm -f my-spring-boot # 刪除舊鏡像 docker rmi -f my-spring-boot:latest # 構(gòu)建新鏡像 docker build -t my-spring-boot . # 運行容器 docker run --name my-spring-boot -p 8080:8080 -d my-spring-boot:latest

點擊保存,任務(wù)配置完成。
構(gòu)建任務(wù)
在 Jenkins 主頁點擊任務(wù)名稱,點擊立即構(gòu)建,可以看到正在構(gòu)建的歷史過程。點擊構(gòu)建歷史中的任務(wù),可以查看詳細(xì)的構(gòu)建日志:

多嘗試幾次,確保構(gòu)建成功。
測試
在瀏覽器中輸入指定 URL,可以看到項目已經(jīng)部署成功。并且當(dāng) Git 倉庫中的項目有更新時,Jenkins 會自動觸發(fā)任務(wù),實現(xiàn)自動化部署:

總結(jié)
到此這篇關(guān)于Jenkins中自動化部署Spring Boot項目的文章就介紹到這了,更多相關(guān)Jenkins自動化部署SpringBoot項目內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- spring boot 項目利用Jenkins實現(xiàn)自動化部署的教程詳解
- 詳解jenkins自動部署springboot應(yīng)用的方法
- Jenkins自動化部署springboot代碼實例
- springboot docker jenkins 自動化部署并上傳鏡像的步驟詳解
- Jenkins自動部署SpringBoot項目實踐教程
- Jenkins+Docker+Gitee+SpringBoot自動化部署
- 阿里SpringBoot應(yīng)用自動化部署實現(xiàn)IDEA版Jenkins
- Jenkins+Docker?一鍵自動化部署?SpringBoot?項目的詳細(xì)步驟
- Jenkins自動化部署SpringBoot項目的實現(xiàn)
相關(guān)文章
Java中final、static關(guān)鍵字與方法的重寫和繼承易錯點整理
這篇文章主要給大家介紹了關(guān)于Java中final、static關(guān)鍵字與方法的重寫和繼承易錯點的相關(guān)資料,在Java編程中final關(guān)鍵字用于限制方法或類的進(jìn)一步修改,final方法不能被子類重寫,而static方法不可被重寫,只能被遮蔽,需要的朋友可以參考下2024-10-10
LocalDateTime日期時間格式中間多了一個T的問題及解決
這篇文章主要介紹了LocalDateTime日期時間格式中間多了一個T的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03
SpringBoot?使用?Sa-Token?完成注解鑒權(quán)功能(權(quán)限校驗)
Sa-Token?是一個輕量級?java?權(quán)限認(rèn)證框架,主要解決登錄認(rèn)證、權(quán)限認(rèn)證、單點登錄、OAuth2、微服務(wù)網(wǎng)關(guān)鑒權(quán)?等一系列權(quán)限相關(guān)問題,這篇文章主要介紹了SpringBoot使用Sa-Token完成注解鑒權(quán)功能,需要的朋友可以參考下2023-05-05

