Docker:Docker搭建Jenkins并共用宿主机Docker部署服务(二)构建后端微服务多模块
前言
继续完成微服务多模块部署,Jenkins的搭建与插件安装可以观看上一篇文章:https://www.cnblogs.com/nhdlb/p/18561435
新建视图
方便将整个项目的前端和后端整合起来


新建任务
选择视图

创建项目(任务)

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


Dockerfile文件内容如下:
FROM openjdk:21
# 设置构建参数
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/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/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/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/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/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/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/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/localtime:/etc/localtime:ro
配置参数化构建
这里配置参数的作用是后续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脚本


#!/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 "########## 读取多选项的值 #####################"
read -ra packages <<< "$base_modules"
# 恢复IFS为旧值
IFS=$OLD_IFS
set +e
# 循环执行发包命令到指定服务器
echo "########## 循环业务模块 #####################"
for path_port in "${packages[@]}"; do
#调用PauseErr函数判断上条命令是否执行成功
pauseErr
# 获取头部:模块路径
module_path=$(echo "${path_port%%:*}" | awk '{$1=$1};1')
# 获取尾部:模块名称
module_name=${module_path##*/}
# 获取尾部:名称
base_name=${module_path##*-}
# 获取尾部:端口号
base_port=${path_port##*:}
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函数判断上条命令是否执行成功
pauseErr
echo "########## 构建 $module_name 镜像 #####################"
# 构建镜像
docker build -t liv****k-$module_name:latest --build-arg JARNAME=./$module_path/target/$module_name --build-arg JARPORT=$base_port .
done
echo "########## 启动项目容器 #####################"
#sleep 10s
#调用PauseErr函数判断上条命令是否执行成功
pauseErr
docker-compose up -d
pauseErr
echo "########## 容器运行完成 #####################"
set -e
保存配置!!!
运行构建

查看Docker镜像和容器


后端容器构建完成!!!!
-----------------------------------
作者:怒吼的萝卜
链接:http://www.cnblogs.com/nhdlb/
-----------------------------------


浙公网安备 33010602011771号