前言
繼續完成跨伺服器遠端部署微服務多模組,Jenkins的搭建與外掛安裝可以觀看上一篇文章:https://www.cnblogs.com/nhdlb/p/18561435
配置SSH遠端伺服器連線
這裡需要安裝 SSH 連線的外掛,可以觀看上一篇文章進行安裝。
開始配置SSH連線
儲存!!
新建檢視
方便將整個專案的前端和後端整合起來
新建任務
選擇檢視
建立專案(任務)
任務配置
專案結構
這裡我先介紹下專案結構,方便大家對後續操作的理解
配置引數化構建
這裡配置引數的作用是後續shell指令碼可以根據引數生成不同映象和容器
注意:配置構建路徑預設的根路徑就是GitLab專案的根目錄,所以這裡的構建路徑直接以 base-modules/ 開始
配置專案地址
配置快照和日誌資訊
配置構建日誌名稱
自定義命名
引用引數構建命名
配置pom檔案用於構建Jar包
# 如果打包所有模組,使用如下命令
clean package -U -Dmaven.test.skip=true
# 如果打包指定模組,使用如下命令
clean package -U -pl ${你的引數構建屬性名} -am -Dmaven.test.skip=true
打包所有模組
打包指定模組
配置Shell指令碼
這裡選擇 Send files or execute commands over SSH
重點:這裡需要給每個模組建立一個 Send files or execute commands over SSH ,因為 Remove prefix 不支援模糊匹配,所以這裡就會麻煩些…………
在最後一個模組 Send files or execute commands over SSH 的 Exec command 寫入需要執行的命令。
遠端伺服器環境
目錄結構
當前目錄就是文章開頭設定的執行jar儲存目錄,/home/compose/business/
Dockerfile
FROM openjdk:21
#LABEL authors="zhaoyue"
# 設定構建引數
ARG JARNAME
# 設定構建引數
ARG JARPORT
# 設定構建引數
ARG ACTIVEPRO
# 傳值
ENV PRO_ACTIVE=${ACTIVEPRO}
# 對映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_ACTIVE}"]
docker-compose.yml
#version: "3.8"
networks:
# 共用其他compose的網段
htec_net:
external: true
services:
gateway:
# 這裡的映象名稱與容器名稱一致,方便管理操作
image: portal-gateway:latest
container_name: portal-gateway
restart: always
ports:
- 9601:9601
networks:
htec_net:
ipv4_address: 172.19.8.11
volumes:
- /etc/localtime:/etc/localtime:ro
core:
image: portal-core:latest
container_name: portal-core
restart: always
ports:
- 9603:9603
networks:
htec_net:
ipv4_address: 172.19.8.13
volumes:
- /etc/localtime:/etc/localtime:ro
project:
image: portal-project:latest
container_name: portal-project
restart: always
ports:
- 9604:9604
networks:
htec_net:
ipv4_address: 172.19.8.14
volumes:
- /etc/localtime:/etc/localtime:ro
system:
image: portal-system:latest
container_name: portal-system
restart: always
ports:
- 9606:9606
networks:
htec_net:
ipv4_address: 172.19.8.16
volumes:
- /etc/localtime:/etc/localtime:ro
jar_build.sh
#!/bin/bash
# 定義變數
JAR_PATH="/home/compose/business/"
JAR_NAMES="portal-gateway:9601,portal-core:9603,portal-project:9604,portal-system:9606"
# 儲存舊的IFS值
OLD_IFS=$IFS
# 設定IFS為逗號
IFS=','
# 將字串分割成陣列
echo "########## 讀取多選項的值 #####################"
read -ra names <<< "$JAR_NAMES"
# 恢復IFS為舊值
IFS=$OLD_IFS
# 進入指定目錄
cd $JAR_PATH || { echo "Failed to change directory"; exit 1; }
echo "########## 停止所有容器 #####################"
# 執行docker-compose清除容器
docker-compose down
echo "########## 迴圈業務模組名稱 #####################"
for name in "${names[@]}"; do
# 獲取頭部:名稱
base_name=$(echo "${name%%:*}" | awk '{$1=$1};1')
# 獲取名字
module_name=${base_name##*-}
# 獲取尾部:埠號
base_port=${name##*:}
echo "#---------- $base_name + $base_port"
# 獲取映象ID
CID_BUSINE=$(docker images | grep "$base_name" | awk '{print $1}')
echo "# - - - - - $CID_BUSINE"
if [ -z "$CID_BUSINE" ]; then
echo "空值,不用刪除映象!"
else
# 刪除映象
docker rmi $CID_BUSINE
fi
# 構建新的映象
docker build -t $base_name:latest --build-arg ACTIVEPRO=portalPlatform_pro --build-arg JARNAME=./base-$module_name --build-arg JARPORT=$base_port .
done
echo "########## 啟動專案容器 #####################"
docker-compose up -d
echo "########## 容器執行完成 #####################"
執行構建
遠端伺服器構建後端容器完成!!!!