前言
继续完成跨服务器远程部署微服务多模块,Jenkins的搭建与插件安装可以观看上一篇文章:https://www.cnblogs.com/nhdlb/p/18561435
配置SSH远程服务器连接
这里需要安装 SSH 连接的插件,可以观看上一篇文章进行安装。
开始配置SSH连接
保存!!
新建视图
方便将整个项目的前端和后端整合起来
新建任务
选择视图
创建项目(任务)
任务配置
项目结构
这里我先介绍下项目结构,方便大家对后续操作的理解
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的网段higec_net:external: true
services:gateway:image: liv****k-base-gateway:latestcontainer_name: liv****k-gatewayrestart: alwaysports:- 9301:9301networks:higec_net:ipv4_address: 172.19.8.71volumes:- /etc/localtime:/etc/localtime:rocore:image: liv****k-base-core:latestcontainer_name: liv****k-corerestart: alwaysports:- 9304:9304networks:higec_net:ipv4_address: 172.19.8.74volumes:- /etc/localtime:/etc/localtime:rodevice:image: liv****k-base-device:latestcontainer_name: liv****k-devicerestart: alwaysports:- 9303:9303networks:higec_net:ipv4_address: 172.19.8.73volumes:- /etc/localtime:/etc/localtime:rofamily:image: liv****k-base-family:latestcontainer_name: liv****k-familyrestart: alwaysports:- 9305:9305networks:higec_net:ipv4_address: 172.19.8.75volumes:- /etc/localtime:/etc/localtime:rofield:image: liv****k-base-field:latestcontainer_name: liv****k-fieldrestart: alwaysports:- 9307:9307networks:higec_net:ipv4_address: 172.19.8.77volumes:- /etc/localtime:/etc/localtime:ropoultry:image: liv****k-base-poultry:latestcontainer_name: liv****k-poultryrestart: alwaysports:- 9308:9308networks:higec_net:ipv4_address: 172.19.8.78volumes:- /etc/localtime:/etc/localtime:rorecord:image: liv****k-base-record:latestcontainer_name: liv****k-recordrestart: alwaysports:- 9309:9309networks:higec_net:ipv4_address: 172.19.8.79volumes:- /etc/localtime:/etc/localtime:rosystem:image: liv****k-base-system:latestcontainer_name: liv****k-systemrestart: alwaysports:- 9306:9306networks:higec_net:ipv4_address: 172.19.8.76volumes:- /etc/localtime:/etc/localtime:ro
配置参数化构建
这里配置参数的作用是后续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:latestcontainer_name: portal-gatewayrestart: alwaysports:- 9601:9601networks:htec_net:ipv4_address: 172.19.8.11volumes:- /etc/localtime:/etc/localtime:rocore:image: portal-core:latestcontainer_name: portal-corerestart: alwaysports:- 9603:9603networks:htec_net:ipv4_address: 172.19.8.13volumes:- /etc/localtime:/etc/localtime:roproject:image: portal-project:latestcontainer_name: portal-projectrestart: alwaysports:- 9604:9604networks:htec_net:ipv4_address: 172.19.8.14volumes:- /etc/localtime:/etc/localtime:rosystem:image: portal-system:latestcontainer_name: portal-systemrestart: alwaysports:- 9606:9606networks:htec_net:ipv4_address: 172.19.8.16volumes:- /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 downecho "########## 循环业务模块名称 #####################"
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"# 获取镜像IDCID_BUSINE=$(docker images | grep "$base_name" | awk '{print $1}')echo "# - - - - - $CID_BUSINE"if [ -z "$CID_BUSINE" ]; thenecho "空值,不用删除镜像!"else# 删除镜像docker rmi $CID_BUSINEfi# 构建新的镜像docker build -t $base_name:latest --build-arg ACTIVEPRO=portalPlatform_pro --build-arg JARNAME=./base-$module_name --build-arg JARPORT=$base_port .
doneecho "########## 启动项目容器 #####################"
docker-compose up -d
echo "########## 容器运行完成 #####################"
运行构建
远程服务器构建后端容器完成!!!!