前言
继续完成微服务多模块部署,Jenkins的搭建与插件安装可以观看上一篇文章:https://www.cnblogs.com/nhdlb/p/18561435
新建视图
方便将整个项目的前端和后端整合起来
新建任务
选择视图
创建项目(任务)
任务配置
项目结果
这里我先介绍下项目结构,方便大家对后续操作的理解
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:latestcontainer_name: liv****k-gatewayrestart: alwaysports:- 9301:9301networks:higec_net:ipv4_address: 172.19.8.71volumes:- /etc/timezone/timezone:/etc/timezone- /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/timezone/timezone:/etc/timezone- /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/timezone/timezone:/etc/timezone- /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/timezone/timezone:/etc/timezone- /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/timezone/timezone:/etc/timezone- /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/timezone/timezone:/etc/timezone- /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/timezone/timezone:/etc/timezone- /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/timezone/timezone:/etc/timezone- /etc/localtime:/etc/localtime:ro
配置参数化构建
这里配置参数的作用是后续shell脚本可以根据参数生成不同镜像和容器
注意:配置构建路径默认的根路径就是GitLab项目的根目录,所以这里的构建路径直接以 base-modules/ 开始
配置项目地址
配置快照和日志信息
配置构建日志名称
自定义命名
引用参数构建命名
配置pom文件用于构建Jar包
clean package -U -pl ${你的参数构建属性名} -am -Dmaven.test.skip=true
配置Shell脚本
#!/bin/bash# 清除Maven本地仓库内的_remote.repositories文件
#find /opt/maven/repository/ -type f -name "_remote.repositories" | xargs rm -f# 判断上条命令是否执行成功,当执行失败的时候显示错误信息,并停止向下执行
function pauseErr(){if [ $? -ne 0 ];thenecho "命令执行失败,终止shell脚本运行"#当上一条命令执行失败后,直接退出脚本,阻止脚本向下执行exit 1fi
}# 保存旧的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_IFSset +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"; thenecho "########## 删除 liv****k-$base_name 容器 #####################"# 使用docker rm命令删除容器,-f表示强制删除docker rm -f liv****k-$base_namefiif docker images | grep "liv****k-$module_name"; thenecho "########## 删除 liv****k-$module_name 镜像 #####################"# 使用docker rmi命令删除镜像docker rmi liv****k-$module_namefipauseErr# 循环端口配置for nameport in "${ports[@]}"; do#获取名称name=${nameport%%/*}#获取端口port=${nameport##*/}if [ "$module_name" == "$name" ]; thendocker build -t liv****k-$module_name:latest --build-arg JARNAME=./$module/target/$module_name --build-arg JARPORT=$port . #调用PauseErr函数判断上条命令是否执行成功pauseErrecho "########## 构建 $module_name 镜像成功 #####################"fidone
done
echo "########## 启动项目容器 #####################"
#sleep 10s
docker-compose up -d
pauseErr
echo "########## 容器运行完成 #####################"set -e
保存配置!!!
运行构建
后端构建完成!!!!