Docker:Docker搭建Jenkins並共用宿主機Docker部署服務(五)跨伺服器遠端部署後端微服務多模組

怒吼的萝卜發表於2024-12-04

前言

繼續完成跨伺服器遠端部署微服務多模組,Jenkins的搭建與外掛安裝可以觀看上一篇文章:https://www.cnblogs.com/nhdlb/p/18561435

配置SSH遠端伺服器連線

這裡需要安裝 SSH 連線的外掛,可以觀看上一篇文章進行安裝。

Docker:Docker搭建Jenkins並共用宿主機Docker部署服務(五)跨伺服器遠端部署後端微服務多模組

開始配置SSH連線

Docker:Docker搭建Jenkins並共用宿主機Docker部署服務(五)跨伺服器遠端部署後端微服務多模組

Docker:Docker搭建Jenkins並共用宿主機Docker部署服務(五)跨伺服器遠端部署後端微服務多模組

儲存!!

新建檢視

方便將整個專案的前端和後端整合起來

Docker:Docker搭建Jenkins並共用宿主機Docker部署服務(五)跨伺服器遠端部署後端微服務多模組

Docker:Docker搭建Jenkins並共用宿主機Docker部署服務(五)跨伺服器遠端部署後端微服務多模組

新建任務

選擇檢視

Docker:Docker搭建Jenkins並共用宿主機Docker部署服務(五)跨伺服器遠端部署後端微服務多模組

建立專案(任務)

Docker:Docker搭建Jenkins並共用宿主機Docker部署服務(五)跨伺服器遠端部署後端微服務多模組

任務配置

專案結構

這裡我先介紹下專案結構,方便大家對後續操作的理解

Docker:Docker搭建Jenkins並共用宿主機Docker部署服務(五)跨伺服器遠端部署後端微服務多模組

Docker:Docker搭建Jenkins並共用宿主機Docker部署服務(五)跨伺服器遠端部署後端微服務多模組

配置引數化構建

這裡配置引數的作用是後續shell指令碼可以根據引數生成不同映象和容器

Docker:Docker搭建Jenkins並共用宿主機Docker部署服務(五)跨伺服器遠端部署後端微服務多模組

注意:配置構建路徑預設的根路徑就是GitLab專案的根目錄,所以這裡的構建路徑直接以 base-modules/ 開始

Docker:Docker搭建Jenkins並共用宿主機Docker部署服務(五)跨伺服器遠端部署後端微服務多模組

Docker:Docker搭建Jenkins並共用宿主機Docker部署服務(五)跨伺服器遠端部署後端微服務多模組

Docker:Docker搭建Jenkins並共用宿主機Docker部署服務(五)跨伺服器遠端部署後端微服務多模組

配置專案地址

Docker:Docker搭建Jenkins並共用宿主機Docker部署服務(五)跨伺服器遠端部署後端微服務多模組

Docker:Docker搭建Jenkins並共用宿主機Docker部署服務(五)跨伺服器遠端部署後端微服務多模組

Docker:Docker搭建Jenkins並共用宿主機Docker部署服務(五)跨伺服器遠端部署後端微服務多模組

配置快照和日誌資訊

Docker:Docker搭建Jenkins並共用宿主機Docker部署服務(五)跨伺服器遠端部署後端微服務多模組

配置構建日誌名稱

自定義命名

Docker:Docker搭建Jenkins並共用宿主機Docker部署服務(五)跨伺服器遠端部署後端微服務多模組

引用引數構建命名

Docker:Docker搭建Jenkins並共用宿主機Docker部署服務(五)跨伺服器遠端部署後端微服務多模組

配置pom檔案用於構建Jar包

# 如果打包所有模組,使用如下命令
clean package -U -Dmaven.test.skip=true
    
# 如果打包指定模組,使用如下命令
clean package -U -pl ${你的引數構建屬性名} -am -Dmaven.test.skip=true

打包所有模組

Docker:Docker搭建Jenkins並共用宿主機Docker部署服務(五)跨伺服器遠端部署後端微服務多模組

打包指定模組

Docker:Docker搭建Jenkins並共用宿主機Docker部署服務(五)跨伺服器遠端部署後端微服務多模組

配置Shell指令碼

這裡選擇 Send files or execute commands over SSH

重點:這裡需要給每個模組建立一個 Send files or execute commands over SSH ,因為 Remove prefix 不支援模糊匹配,所以這裡就會麻煩些…………

Docker:Docker搭建Jenkins並共用宿主機Docker部署服務(五)跨伺服器遠端部署後端微服務多模組

在最後一個模組 Send files or execute commands over SSH 的 Exec command 寫入需要執行的命令。

Docker:Docker搭建Jenkins並共用宿主機Docker部署服務(五)跨伺服器遠端部署後端微服務多模組

遠端伺服器環境

目錄結構

當前目錄就是文章開頭設定的執行jar儲存目錄,/home/compose/business/

Docker:Docker搭建Jenkins並共用宿主機Docker部署服務(五)跨伺服器遠端部署後端微服務多模組

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 "########## 容器執行完成 #####################"

執行構建

Docker:Docker搭建Jenkins並共用宿主機Docker部署服務(五)跨伺服器遠端部署後端微服務多模組

Docker:Docker搭建Jenkins並共用宿主機Docker部署服務(五)跨伺服器遠端部署後端微服務多模組

Docker:Docker搭建Jenkins並共用宿主機Docker部署服務(五)跨伺服器遠端部署後端微服務多模組

遠端伺服器構建後端容器完成!!!!

相關文章