前言
繼續完成微服務多模組部署,Jenkins的搭建與外掛安裝可以觀看上一篇文章:https://www.cnblogs.com/nhdlb/p/18561435
新建檢視
方便將整個專案的前端和後端整合起來
新建任務
選擇檢視
建立專案(任務)
任務配置
專案結果
這裡我先介紹下專案結構,方便大家對後續操作的理解
Dockerfile檔案內容如下:
FROM openjdk:21
#LABEL authors="zhaoyue"
# 設定構建引數
ARG JARNAME
# 設定構建引數
ARG JARPORT
# 對映jar包
COPY ${JARNAME}.jar app.jar
# 埠
EXPOSE ${JARPORT}
# 執行命令
ENTRYPOINT ["java", "-jar", "-Duser.timezone=Asia/Shanghai","-Dfile.encoding=UTF-8", "app.jar", "--spring.profiles.active=pro"]
docker-compose.yml檔案內容如下:
#version: "3.8"
networks:
# 共用其他compose的網段
higec_net:
external: true
services:
gateway:
image: liv****k-base-gateway:latest
container_name: liv****k-gateway
restart: always
ports:
- 9301:9301
networks:
higec_net:
ipv4_address: 172.19.8.71
volumes:
- /etc/timezone/timezone:/etc/timezone
- /etc/localtime:/etc/localtime:ro
core:
image: liv****k-base-core:latest
container_name: liv****k-core
restart: always
ports:
- 9304:9304
networks:
higec_net:
ipv4_address: 172.19.8.74
volumes:
- /etc/timezone/timezone:/etc/timezone
- /etc/localtime:/etc/localtime:ro
device:
image: liv****k-base-device:latest
container_name: liv****k-device
restart: always
ports:
- 9303:9303
networks:
higec_net:
ipv4_address: 172.19.8.73
volumes:
- /etc/timezone/timezone:/etc/timezone
- /etc/localtime:/etc/localtime:ro
family:
image: liv****k-base-family:latest
container_name: liv****k-family
restart: always
ports:
- 9305:9305
networks:
higec_net:
ipv4_address: 172.19.8.75
volumes:
- /etc/timezone/timezone:/etc/timezone
- /etc/localtime:/etc/localtime:ro
field:
image: liv****k-base-field:latest
container_name: liv****k-field
restart: always
ports:
- 9307:9307
networks:
higec_net:
ipv4_address: 172.19.8.77
volumes:
- /etc/timezone/timezone:/etc/timezone
- /etc/localtime:/etc/localtime:ro
poultry:
image: liv****k-base-poultry:latest
container_name: liv****k-poultry
restart: always
ports:
- 9308:9308
networks:
higec_net:
ipv4_address: 172.19.8.78
volumes:
- /etc/timezone/timezone:/etc/timezone
- /etc/localtime:/etc/localtime:ro
record:
image: liv****k-base-record:latest
container_name: liv****k-record
restart: always
ports:
- 9309:9309
networks:
higec_net:
ipv4_address: 172.19.8.79
volumes:
- /etc/timezone/timezone:/etc/timezone
- /etc/localtime:/etc/localtime:ro
system:
image: liv****k-base-system:latest
container_name: liv****k-system
restart: always
ports:
- 9306:9306
networks:
higec_net:
ipv4_address: 172.19.8.76
volumes:
- /etc/timezone/timezone:/etc/timezone
- /etc/localtime:/etc/localtime:ro
配置引數化構建
這裡配置引數的作用是後續shell指令碼可以根據引數生成不同映象和容器
注意:配置構建路徑預設的根路徑就是GitLab專案的根目錄,所以這裡的構建路徑直接以 base-modules/ 開始
配置專案地址
配置快照和日誌資訊
配置構建日誌名稱
自定義命名
引用引數構建命名
配置pom檔案用於構建Jar包
clean package -U -pl ${你的引數構建屬性名} -am -Dmaven.test.skip=true
配置Shell指令碼
#!/bin/bash
# 清除Maven本地倉庫內的_remote.repositories檔案
#find /opt/maven/repository/ -type f -name "_remote.repositories" | xargs rm -f
# 判斷上條命令是否執行成功,當執行失敗的時候顯示錯誤資訊,並停止向下執行
function pauseErr(){
if [ $? -ne 0 ];then
echo "命令執行失敗,終止shell指令碼執行"
#當上一條命令執行失敗後,直接退出指令碼,阻止指令碼向下執行
exit 1
fi
}
# 儲存舊的IFS值
OLD_IFS=$IFS
# 設定IFS為逗號
IFS=','
# 將字串分割成陣列
echo "########## 讀取base-modules模組路徑 #####################"
read -ra packages <<< "$liv****k_modules"
# 將字串分割成陣列
echo "########## 讀取base-modules模組埠 #####################"
read -ra ports <<< "$module_port"
# 恢復IFS為舊值
IFS=$OLD_IFS
set +e
# 迴圈執行發包命令到指定伺服器
echo "########## 迴圈base-modules模組 #####################"
for module in "${packages[@]}"; do
# 獲取子模組名稱
module_name=${module##*/}
# 獲取名稱
base_name=${module_name##*-}
if docker ps -a | grep "liv****k-$base_name"; then
echo "########## 刪除 liv****k-$base_name 容器 #####################"
# 使用docker rm命令刪除容器,-f表示強制刪除
docker rm -f liv****k-$base_name
fi
if docker images | grep "liv****k-$module_name"; then
echo "########## 刪除 liv****k-$module_name 映象 #####################"
# 使用docker rmi命令刪除映象
docker rmi liv****k-$module_name
fi
pauseErr
# 迴圈埠配置
for nameport in "${ports[@]}"; do
#獲取名稱
name=${nameport%%/*}
#獲取埠
port=${nameport##*/}
if [ "$module_name" == "$name" ]; then
docker build -t liv****k-$module_name:latest --build-arg JARNAME=./$module/target/$module_name --build-arg JARPORT=$port .
#呼叫PauseErr函式判斷上條命令是否執行成功
pauseErr
echo "########## 構建 $module_name 映象成功 #####################"
fi
done
done
echo "########## 啟動專案容器 #####################"
#sleep 10s
docker-compose up -d
pauseErr
echo "########## 容器執行完成 #####################"
set -e
儲存配置!!!
執行構建
後端構建完成!!!!