Docker:Docker部署Jenkins并共用宿主机Docker部署微服务多模块(二)构建微服务后端多模块

news/2025/2/25 19:01:38/文章来源:https://www.cnblogs.com/nhdlb/p/18565278

前言

继续完成微服务多模块部署,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

 保存配置!!!

运行构建

后端构建完成!!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/840093.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设置开机启动【最小化后台运行】

添加后台启动 win + r 打开"运行"对话框 输入 shell:startup将要启动的应用快捷方式添加到该文件夹中 最小化启动 打开要启动软件的属性,选择最小化并应用,即可完成

面向对象程序设计期中与中三次作业的总结

前言 这篇博客是完成《面向对象程序设计》(java)课程的中三次PTA作业后的总结。主要内容有:最后一次的答题判题程序和前两次家庭电路模拟程序的分析。 面向对象程序设计思想的一些学习总结 学习到的一些调试方法题目分析 最后一次答题判题程序的分析 说实话已经过去三周了,…

高级语言程序第8次作业

高级语言程序设计课程第八次个人作业 这个作业属于哪个课程:https://edu.cnblogs.com/campus/fzu/2024C 这个作业要求在哪里:https://edu.cnblogs.com/campus/fzu/2024C/homework/13303 学号:102300303 姓名:梁佳 第11章第1题第2题第3题第6题第7题第12章第1题

Logisim-CRC简单介绍

简介 CRC(Cyclic Redundancy Check)即循环冗余校验是一种既能检错也能纠错的校验码,校验的原理是基于模2运算; 编码/解码过程 这里以一个示例来进行说明编码过程,假设原始数据为:1101、计算校验位的位数 根据公式 k + r ≤ 2r - 1 计算,其中【r】为校验位位数,【k】为…

第四-六次作业总结

一、前言 该系列题目均为设计与实现一个小型的答题判题程序,题目难度从简单到复杂逐步提升,题目数量和输入信息也逐步增加。以下是对这三道题的总结: 1. 知识点第4次题目集在第3次题目集的基础上又增加了难度,该题目集主要考察编程技巧和算法设计,特别是在答题系统中如何通…

2024/11/22日工作总结

完成java请假条管理系统: 实现web页面的增删改查操作; 项目结构如图:mapper:点击查看代码 package com.vivy.mapper;import com.vivy.pojo.Application;import java.util.List;public interface ApplicationMapper {void add(Application application);Application selectB…

若依Ruoyi分离版替换 MyBatis-Plus

若依项目:Ruoyi-vue 3.8.8 MyBatis-Plus:3.5.9 目标:用 MyBatis-Plus 替换项目中 MyBatis 建立分支 新建分支switch-mybatisplus以防万一 改造依赖 在项目的根pom.xml中引入依赖 <properties> ... <mybatis-plus.version>3.5.9</mybatis-plus.version> &l…

ABP aspnetzero power toole 最新 4.4.0 和谐记录

参照之前的记录 .net zero power toole 破解日志在用工具创建模型后,点击生成的过程.会在代码目录生成 AspNetZeroRadTool 的文件夹.总是会覆盖. AspNetZeroRadTool 的文件夹 中 生成当前模型的json文件 执行 dotnet AspNetZeroRadTool 模型.json 生成文件所以 要处理的文件只…

Docker:Docker部署Jenkins并共用宿主机Docker部署微服务多模块(一)Jenkins部署及插件环境搭建

前言 公司项目多忙着开发,所有项目服务都是博主一个个部署的,时间久了也是心累,所以抽时间把Jenkins部署上,之后让其他开发人员自己部署(让我解脱吧!!)。 部署Jenkins容器 Docker安装就不在赘述了,可以看我之前的文章(懒了);直接开始拉取jenkins镜像。 拉取镜像 docker…

题目集4~6总结

前言 经过三周的Java开发课程,我们逐渐从基础的逻辑实现过渡到更复杂的系统设计,这不仅强化了我们对Java语言基础的理解,还深入实践了面向对象设计、异常处理、多线程和复杂数据结构等核心知识点。以下是对这三次作业的总结和反思。 第一次作业 题目开始引入复杂逻辑,包括试…

22207320-王攀-Blog2

题目集4~6的总结性Blog 一、前言 经过题目集4至6的练习,我对Java编程的理解和实践能力都有了显著的提升。题目集4主要考察了继承与正则表达式的知识点,题目集5引入了家庭电路的模拟,题目集6则在前者的基础上增加了并联电路的处理。三次题目集的题量逐步增加,难度也有所提升…

博客园管理记录

2024年11月11.20入园时间~ 【这个时间我在上大三欸~ 】大道至简,知易行难。从今天开始改变,这是对平庸生活最好的回击。 点击右上角即可分享@media (max-width: 767px) { #set_btn_box { width: 100vw; left: 0; right: 0; bottom: 0; background: rgba(255, 255, 255,…