前言
继续完成跨服务器远程部署微服务多模块,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 "########## 容器运行完成 #####################"
运行构建
远程服务器构建后端容器完成!!!!
标签:部署,宿主机,jar,etc,portal,模块,构建,Docker,localtime From: https://www.cnblogs.com/nhdlb/p/18586843