Docker:Docker部署Jenkins並共用宿主機Docker部署微服務多模組(二)構建微服務後端多模組

怒吼的萝卜發表於2024-11-23

前言

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

新建檢視

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

Docker:Docker部署Jenkins並共用宿主機Docker部署微服務多模組(二)構建微服務後端多模組

Docker:Docker部署Jenkins並共用宿主機Docker部署微服務多模組(二)構建微服務後端多模組

新建任務

選擇檢視

Docker:Docker部署Jenkins並共用宿主機Docker部署微服務多模組(二)構建微服務後端多模組

建立專案(任務)

Docker:Docker部署Jenkins並共用宿主機Docker部署微服務多模組(二)構建微服務後端多模組

任務配置

專案結果

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

Docker:Docker部署Jenkins並共用宿主機Docker部署微服務多模組(二)構建微服務後端多模組

Docker:Docker部署Jenkins並共用宿主機Docker部署微服務多模組(二)構建微服務後端多模組

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指令碼可以根據引數生成不同映象和容器

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部署微服務多模組(二)構建微服務後端多模組

配置pom檔案用於構建Jar包

clean package -U -pl ${你的引數構建屬性名} -am -Dmaven.test.skip=true

Docker:Docker部署Jenkins並共用宿主機Docker部署微服務多模組(二)構建微服務後端多模組

配置Shell指令碼

Docker:Docker部署Jenkins並共用宿主機Docker部署微服務多模組(二)構建微服務後端多模組

#!/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

儲存配置!!!

執行構建

Docker:Docker部署Jenkins並共用宿主機Docker部署微服務多模組(二)構建微服務後端多模組

後端構建完成!!!!

相關文章