Docker:Docker搭建Jenkins并共用宿主机Docker部署服务(五)跨服务器远程部署后端微服务多模块

前言

继续完成跨服务器远程部署微服务多模块,Jenkins的搭建与插件安装可以观看上一篇文章:https://www.cnblogs.com/nhdlb/p/18561435

配置SSH远程服务器连接

这里需要安装 SSH 连接的插件,可以观看上一篇文章进行安装。

开始配置SSH连接

保存!!

新建视图

方便将整个项目的前端和后端整合起来

新建任务

选择视图

创建项目(任务)

任务配置

项目结构

这里我先介绍下项目结构,方便大家对后续操作的理解

我们要做的是远程服务器自动部署,所以这个项目内的Dockerfile、docker-compose.yml要放到远程服务器的目录下,后面会讲,目前大家不要纠结这几个文件。

配置参数化构建

这里配置参数的作用是后续shell脚本可以根据参数生成不同镜像和容器

注意:配置构建路径默认的根路径就是GitLab项目的根目录,所以这里的构建路径直接以 base-modules/ 开始

配置项目地址

配置构建触发器

配置快照构建

定时任务构建

根据项目的要求,是否需要设置定时构建项目。

Jenkins使用Cron表达式来设置定时任务的执行规则:

  Cron由5个或6个字段组成,分别表示分钟、小时、日期、月份、星期几

## Jenkins中的 H 标记用于分散任务的触发时间,以避免任务在同一时间点过载执行;所以这点跟原始Cron有点不同
# 每隔5分钟执行一次
H/5 * * * *
# 每天上午10点和下午4点各执行一次
H 10,16 * * *
# 每15分钟构建一次
H/15 * * * *
# 每天8点~17点,两小时构建一次
H 8-17/2 * * *
# 周一到周五,8点~17点,两小时构建一次
H 8-17/2 * * 1-5
# 除12月外每月1号、15号各构建一次
H H 1,15 1-11 *

构建日志自定义命名

引用参数构建命名

配置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 

重点:这里需要给每个模块创建一个 Transfer Set ,因为 Remove prefix 不支持模糊匹配,所以这里就会麻烦些…………

每个模块都需要创建 Transfer Set 模块

在最后一个 Transfer Set 模块的 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包存放的绝对路径
JAR_PATH="/home/compose/business/"
# 镜像名称和端口
JAR_NAMES="portal-gateway:9601,portal-core:9603,portal-project:9604,portal-system:9606"
# 项目的生产环境配置
MAVEN_ENV="portalPlatform_pro"

# 保存旧的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=$MAVEN_ENV --build-arg JARNAME=./base-$module_name --build-arg JARPORT=$base_port .
done

echo "########## 启动项目容器 #####################"
docker-compose up -d
echo "########## 容器运行完成 #####################"

运行构建

远程服务器构建后端容器完成!!!!

posted @ 2024-12-04 17:39  怒吼的萝卜  阅读(477)  评论(1)    收藏  举报