安裝步驟
1. 拉取 Jenkins 鏡像
首先,拉取 Jenkins 鏡像:
docker pull jenkins/jenkins:2.500-jdk21
2. 創(chuàng)建 Jenkins 工作目錄
創(chuàng)建 Jenkins 工作目錄,并設(shè)置權(quán)限:
// Jenkins 創(chuàng)建數(shù)據(jù)卷(持久化數(shù)據(jù))
mkdir -p /mnt/datadisks/docker-root/jenkins_5080/{jenkins_home,www}
mkdir -p /mnt/datadisks/docker-root/jenkins_5080/www/html
chmod 777 /mnt/datadisks/docker-root/jenkins_5080
chmod 777 /mnt/datadisks/docker-root/jenkins_5080/jenkins_home
chmod 777 /mnt/datadisks/docker-root/jenkins_5080/www/html
3. 啟動 Jenkins 容器
啟動 Jenkins 容器,并映射端口和掛載卷:
#啟動容器
docker run --name jenkins-5080 -d --restart=always -p 5080:8080 -p 50000:50000 \
-v /mnt/datadisks/docker-root/jenkins_5080/jenkins_home:/var/jenkins_home \
-v /mnt/datadisks/docker-root/jenkins_5080/www/html:/var/www/html \
-v /var/run/docker.sock:/var/run/docker.sock \
jenkins/jenkins:2.500-jdk21
# 獲取jenkins密碼
docker exec jenkins-5080 cat /var/jenkins_home/secrets/initialAdminPassword
-p 5080:8080:Web 訪問端口(宿主機(jī)端口:容器端口)
-p 50000:50000:Jenkins 代理通信端口
-v /mnt/datadisks/docker-root/jenkins_5080/jenkins_home:/var/jenkins_home:持久化 Jenkins 配置和數(shù)據(jù)
/var/www/html:/var/www/html:將nginx中的靜態(tài)資源目錄共享到j(luò)enkins中
/mnt/datadisks/docker-root/jenkins_5080/www/html : /var/www/html`:將nginx中的靜態(tài)資源目錄共享到j(luò)enkins中
-v /var/run/docker.sock:/var/run/docker.sock:允許容器內(nèi)使用宿主機(jī)的 Docker(可選,用于在 Jenkins Pipeline 中調(diào)用 Docker)
--restart unless-stopped:容器自動重啟策略
4. 獲取初始管理員密碼
查看 Jenkins 容器日志,獲取初始管理員密碼:
docker logs jenkins-5080
或者進(jìn)入容器,查看密碼文件:
docker exec jenkins-5080 cat /var/jenkins_home/secrets/initialAdminPassword
5. 訪問 Jenkins
在瀏覽器中訪問 Jenkins:
http://<your_server_ip>:8080
輸入獲取的初始管理員密碼,完成初始設(shè)置。
jenkinsAdmin AdminJenkins
6. 配置插件源
為了加快插件下載速度,可以將插件源設(shè)置為國內(nèi)鏡像。編輯 hudson.model.UpdateCenter.xml 文件:
vim /usr/local/jenkins/hudson.model.UpdateCenter.xml
將 URL 修改為:
<url>https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json</url>
xxxxxxxxxx 修改配置文件重啟nginx容器docker exec -it nginx service nginx reload查詢docker中nginx容器的日志的前10行docker logs --tail="10" nginxdocker容器中安裝vim(如果下載不下來,需要配置下國內(nèi)鏡像)apt-get updateapt-get install vimtext
docker restart jenkins-5080
配置 Jenkins
配置 JDK
Jenkins 容器內(nèi)已經(jīng)默認(rèn)安裝了 JDK,可以在全局配置中設(shè)置 JDK 路徑:
/opt/java/openjdk
配置 Maven
安裝 Maven 插件,并在全局工具配置中設(shè)置 Maven 路徑:
/usr/local/maven
創(chuàng)建 Jenkins 任務(wù)
創(chuàng)建 Maven 項目
在 Jenkins 上新建一個 Maven 項目,配置代碼倉庫地址和構(gòu)建命令。構(gòu)建完成后,可以通過執(zhí)行 Shell 腳本來啟動服務(wù)。
示例 Shell 腳本
\#!/bin/bash
SERVER_NAME=jenkins-demo
APP_HOME=$(pwd)
JAR_NAME=jenkins-demo-0.0.1-SNAPSHOT.jar
JAR_PATH=${APP_HOME}/target
PID_FILE="${APP_HOME}/${SERVER_NAME}.pid"
if [ -f "${PID_FILE}" ]; then
PID=$(cat "${PID_FILE}") && kill -9 $PID && echo "kill process ${PID} finished!"
fi
cd $JAR_PATH
chmod 755 $JAR_NAME
BUILD_ID=dontKillMe nohup java -jar $JAR_NAME &
JAVA_PID=$!
echo "${JAVA_PID}" > "${PID_FILE}"
通過上述步驟,即可使用 Docker 安裝 Jenkins 并實現(xiàn)項目的自動化部署
發(fā)布SpringBoot項目
1、Publish Over SSH
在插件管理中安裝插件 Publish Over SSH
在系統(tǒng)管理 -> 系統(tǒng)配置中設(shè)置 Publish Over SSH,用于目標(biāo)服務(wù)器的連接
- Dashboard->Manage Jenkins -> System
找到 SSH Servers 添加 SSH 遠(yuǎn)程服務(wù)

新建任務(wù)
由于是 Gradle 項目,所以我們選擇 “構(gòu)建一個自由風(fēng)格的軟件項目
下面說幾個關(guān)鍵的配置點:

到達(dá)一定的天數(shù)或構(gòu)建數(shù)目則自動廢棄前面的構(gòu)建

構(gòu)建觸發(fā)器,有定時、輪詢等情況。GitHub hook選項的意思是,檢測代碼有沒有更新,如果有更新則自動構(gòu)建。但前提是:GitHub收到提交的代碼后要主動通知Jenkins,所以Jenkins所在服務(wù)器一定要有外網(wǎng)IP,并且還需要做一系列的配置,本文我們暫時不做詳細(xì)的介紹。

建步驟選的是:執(zhí)行 shell,由于我要打包的是 manager 模塊,所以先進(jìn)入 manager 目錄。先執(zhí)行 gradle clean 清除之前打的包,再執(zhí)行 gradle build 命令重新打包。整個項目的代碼下載存放的路徑在服務(wù)器的:/root/.jenkins/workspace 目錄下,GradleTest 為我們在 Jenkins 中創(chuàng)建的構(gòu)建任務(wù)名。

構(gòu)建后操作選擇:Send build artifacts over SSH,將打好的 Jar 包發(fā)送到目標(biāo)服務(wù)器指定的目錄下,然后根據(jù)命令生成鏡像,運(yùn)行容器。
注意:生成鏡像的前提是目標(biāo)服務(wù)器上已經(jīng)安裝完成 docker 服務(wù),基礎(chǔ)鏡像已經(jīng)下載完成,dockfile已經(jīng)正確編寫。
構(gòu)建后操作 在遠(yuǎn)程服務(wù)器上執(zhí)行 下面的腳本文件
#!/bin/bash
#1.2.3.4.5.6 需要根據(jù)不同項目修改不同值
#1.服務(wù)名稱
SERVER_NAME="mgt-admin"
#2 image 版本
Image_Version="v1.0"
#3 創(chuàng)建 image 的目錄
Creat_Image_Path="/docker-images-creat/mgt-hotel"
#4.啟動dev配置文件
CONFIG_NAME=prod
#5.源jar路徑,mvn打包完成之后,target目錄下的jar包或jar包名稱(包含后綴)
JAR_NAME="/docker-images-creat/hotel-booking/target/hms-mgt-0.0.1.jar"
#6.端口
PORT=9060
echo "清理$SERVER_NAME的容器"
containerId=$(docker ps -a | grep -w $SERVER_NAME | awk '{print $1}')
if [ -n "$containerId" ];
then
docker stop $containerId
docker rm $containerId
echo "成功停止、刪除容器--"$containerId
fi
imageId=$(docker images | grep -w $SERVER_NAME | awk '{print $3}')
if [ -n "$imageId" ];
then
docker rmi -f $imageId
echo "成功刪除鏡像--"$imageId
fi
echo "停止并清除鏡像完成,進(jìn)入創(chuàng)建新鏡像過程"
# echo "復(fù)制jar包到/createImages/demo目錄下"
#復(fù)制jar包到/createImages/demo目錄下
# cp $JAR_PATH/$JAR_NAME $JAR_WORK_PATH
#切換到demo創(chuàng)建鏡像文件夾目錄下
cd $Creat_Image_Path
#修改文件權(quán)限
chmod 755 $JAR_NAME
echo "執(zhí)行命令創(chuàng)建新鏡像"
#執(zhí)行docker創(chuàng)建鏡像命令
docker build -t $SERVER_NAME:$Image_Version .
#刪除Dockerfile文本文件
# rm /var/jenkins_home/createImages/$SERVER_NAME/Dockerfile
#運(yùn)行鏡像
docker run --name $SERVER_NAME --restart=always -d -p $PORT:8080 \
-v /mnt/docker-root/hotel-booking/admin/config:/config/ \
-v /mnt/docker-root/hotel-booking/admin/logs-root:/logs-root/ \
-v /mnt/docker-root/hotel-booking/admin/upload_root:/upload_root/ \
--network my-net --log-opt max-size=10m --log-opt max-file=3 $SERVER_NAME:$Image_Version
echo "運(yùn)行新鏡像,流程完畢,端口號為:$PORT"
這樣我們一次構(gòu)建就已經(jīng)完成了 代碼下載、打包、停止并刪除目標(biāo)服務(wù)器指定的容器、刪除鏡像、重新生成鏡像、啟動容器等步驟,通過這一系列的動作完成了整個SpringBoot的項目的環(huán)境部署。
通過 docker 命令查詢?nèi)萜鬟\(yùn)行的日志可查看容器運(yùn)行的情況,如下:
docker logs -f 85f42a7d3230