maven部署方案之分离业务包

news2024/11/25 4:41:47

一、思想:

通过将业务包和公共包分离,集中管理所有包,打包时只构建业务包减少项目包的大小和传输时间。

为了观测稳定性,暂通过环境区分,较为频繁的联调环境采用该方式,测试、预发、正式暂保持一体化打包方式不变。

二、方法论:

注意:如果是第一次引入依赖(有依赖变动),则需要采用默认方式,先在本地构建打包再解压,将其中lib中的所有jar放于服务器上的lib目录中。

步骤一:配置项目启动类所在的pom如下:

<build>
    <plugins>
        <!-- 部署通用插件(不区分环境) -->
        <plugin> 
        </plugin>
    </plugins>
</build>
 
<profiles>
    <profile>
        <!--默认部署环境(测试、预发、正式)-->
        <!--一体化打包(所有依赖包都会被打进业务包里)-->
        <id>default</id>
        <properties>
            <project.env>default</project.env>
        </properties>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    </profile>
 
    <profile>
        <!--联调-->
        <id>dev</id>
        <properties>
            <project.env>dev</project.env>
        </properties>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <configuration>
                        <mainClass>启动类路径</mainClass>
                        <layout>ZIP</layout>
                        <includes>
                            <include>
                              直接隶属于项目的子包
                            </include>
                        </includes>
                    </configuration>
                    <executions>
                        <execution>
                            <goals>
                                <goal>repackage</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

步骤二:jekins部署命令增加环境

联调环境相比于默认环境需指定dev方式:clean install package -Pdev -Dmaven.test.skip=true

步骤三:修改启动shell脚本指定lib目录

-Dloader.path=$BASE_PATH/lib

三、实践:

因是第一次构建需将项目依赖包都上传至公共管理路径lib,通过maven默认构建解压后上传
在这里插入图片描述

步骤一:插件配置

<build>
    <plugins>
        <!-- 此插件用来生成通用mapper的代码 -->
        <plugin>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-maven-plugin</artifactId>
            <version>1.3.2</version>
            <configuration>
                <configurationFile>${basedir}/src/main/resources/builder/generatorConfig.xml
                </configurationFile>
                <overwrite>true</overwrite>
                <verbose>true</verbose>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-java</artifactId>
                    <version>8.0.23</version>
                    <scope>runtime</scope>
                </dependency>
                <dependency>
                    <groupId>com.baomidou</groupId>
                    <artifactId>mybatis-plus-boot-starter</artifactId>
                    <version>${mapper.version}</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
 
</build>
<profiles>
    <profile>
        <!--默认(测试、预发、正式)-->
        <id>default</id>
        <properties>
            <project.env>default</project.env>
        </properties>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
 
        </build>
    </profile>
    <profile>
        <!--联调-->
        <id>dev</id>
        <properties>
            <project.env>dev</project.env>
        </properties>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <configuration>
                        <mainClass>com.runlion.hshb.erp.HshbErpWebApplication</mainClass>
                        <layout>ZIP</layout>
                        <includes>
                            <include>
                                <groupId>com.runlion.hshb</groupId>
                                <artifactId>hb-erp-api</artifactId>
                            </include>
                        </includes>
                    </configuration>
                    <executions>
                        <execution>
                            <goals>
                                <goal>repackage</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

步骤二:jekins部署命令增加环境

联调环境相比于默认环境需指定dev方式:clean install package -Pdev -Dmaven.test.skip=true
在这里插入图片描述

步骤三:修改启动shell脚本指定lib目录-Dloader.path=$BASE_PATH/lib

#!/usr/bin/env bash
source /etc/profile
source /app/hshb/erp/sh/constant.sh
 
BASE_PATH=/app/hshb/erp
PROJECT_NAME=hb-erp
JENKINS_JOB_NAME=hshb-ci-erp
PROFILE=$EVN_PROFILE
DEBUG_PORT=9065
TEMP_PATH=$BASE_PATH/artifacts/$PROJECT_NAME
 
JAR_NAME=$PROJECT_NAME.jar
 
echo "停止服务..."
PID=`ps -ef | grep $JAR_NAME | grep -v grep | awk '{print $2}'`
if [ -n "$PID" ]
then
   echo "kill -9 pid:" $PID
   kill -9 $PID
fi
 
 
 
echo "拷贝新jar到running目录"
cp $BASE_PATH/artifacts/$JENKINS_JOB_NAME/hb-erp-web-0.0.1-SNAPSHOT.jar $BASE_PATH/running/$JAR_NAME
 
echo "拷贝新jar的子jar到lib目录"
unzip -d $TEMP_PATH  $BASE_PATH/artifacts/$JENKINS_JOB_NAME/hb-erp-web-0.0.1-SNAPSHOT.jar
cp $TEMP_PATH/BOOT-INF/lib/hb-erp-api-0.0.1-SNAPSHOT.jar   $BASE_PATH/lib/
rm -rf  $TEMP_PATH
 
echo "清理超过10天的日志文件..."
cd $BASE_PATH/logs
find $PROJECT_NAME/ -mtime +10 -name "*.log" -exec rm -rf {} \;
rm -rf $PROJECT_NAME-running.log
 
echo "启动服务 ..."
cd $BASE_PATH/running
 
nohup java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=$DEBUG_PORT,suspend=n -Xms768m -Xmx768m   -jar -Dloader.path=$BASE_PATH/lib $JAR_NAME   --spring.profiles.active=$PROFILE >> $BASE_PATH/logs/$PROJECT_NAME-running.log 2>&1 &
 
NEW_PID=`ps -ef | grep $JAR_NAME | grep -v grep | awk '{print $2}'`
echo "启动完成,当前服务PID=$NEW_PID"

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

golang实现andflow流程引擎

1、andflow引擎 andflow_js可以实现在Html端设计流程&#xff0c;并将设计结果保存为json模型&#xff0c;andflow可以用于设计业务流程、数据处理流程、工作流、控制流等一切可流程化的过程。 由于golang具备高效、跨平台、并且还能够直接编译成可执行文件&#xff0c;这些优…

selenium 找不到元素:Unable to find element on closed window

浏览器&#xff1a;IE 报错信息&#xff1a; Unable to find element on closed window Unable to get browser 过程&#xff1a;登录》跳转页面&#xff08;同窗口&#xff09;》点击备份按钮 已知代码没有改过&#xff0c;而且部署到多个机子上&#xff0c;很多机子没有问…

C++11(一)

&#x1f9f8;&#x1f9f8;&#x1f9f8;各位大佬大家好&#xff0c;我是猪皮兄弟&#x1f9f8;&#x1f9f8;&#x1f9f8; 文章目录一、列表初始化initializer_list二、声明1.auto2.decltype3.nullptr三、C11 STL中的变化1.array2.forward_list3.STL其他变化四、C关键字新功…

NOIP 装箱问题

题目&#xff1a;[NOIP2001]装箱问题 &#xff0c;哈哈&#xff0c;我们今天来看一道很古老的题嘛&#xff0c;这是选自NOIP上的一道题&#xff0c;好了&#xff0c;我们一起来看看题意吧&#xff1a; 考虑到直接复制题目&#xff0c;或者截屏的方式不是很方便阅读&#xff0…

常见的网络协议

目录 一、TCP/IP协议簇 二、网络设备与五层模型对应关系&#xff1a; 三、常用网络协议总结&#xff08;TCP/IP协议簇&#xff09; 四、应用层服务协议 五、传输层协议组 TCP_UDP 六、网络层协议 IP_ICMP_ARP 七、物理层协议 MAC子层协议 一、TCP/IP协议簇 OSI七层模型…

视频怎么转换为音频文件?快来掌握这几种方式

大家平时在下载网课资源进行学习的时候&#xff0c;看久了眼睛也会开始疲劳&#xff0c;而且有些视频的画面看起来很枯燥。其实我们可以使用一些软件把视频中的音频分离出来&#xff0c;直接收听音频也可以学到知识&#xff0c;而且我们还可以处理其他的事情&#xff0c;是不是…

《计算机体系结构量化研究方法第六版》1.5 集成电路中的功耗和能耗趋势

1.5.1 功耗和能耗&#xff1a;系统视角 Q1&#xff1a;处理器需要的最大功耗是多少&#xff1f; 如果处理器的预期功耗大于电源系统能够提供的功耗&#xff08;试图汲取的电流大于电源系统可以提供的电流&#xff09;&#xff0c;通常会导致电压下降而让器件无法工作。在峰值…

食谱类小程序开发,升级美食服务质量

网络时代&#xff0c;人们可以在网上快速获取到各种资源信息&#xff0c;疫情的影响让人们被封控在家里出不了门&#xff0c;这也就给人们提供了一个回归厨房的契机&#xff0c;很多人在此期间开启了自己的美食制作之旅&#xff0c;朋友圈也变成了一个美食分享社区&#xff0c;…

AlphaFold2源码解析(1)--安装使用

AlphaFold2源码解析(1)–安装使用 AlphaFold2有两种安装方式&#xff1a; 具体可以参考我之前写的博客&#xff1a; Alphafold docker 安装: 参考GitHub&#xff1a;https://github.com/deepmind/alphafold 一步一步安装就可以了&#xff0c; Alphafold 非docker 安装指南 如…

基于PHP+MySQL蚕豆酱厂管理系统的设计与实现

论文阐述了安庆市胡玉美蚕豆酱厂管理系统的设计与实现&#xff0c;并对该系统的需求分析及系统需要实现的设计方法作了介绍。该系统的基本功能包括用户登录&#xff0c;管理员信息管理&#xff0c;车间主任信息管理&#xff0c;采购员信息管理&#xff0c;生产计划管理&#xf…

【正点原子FPGA连载】 第十七章 HDMI彩条显示实验摘自【正点原子】DFZU2EG/4EV MPSoC 之FPGA开发指南V1.0

1&#xff09;实验平台&#xff1a;正点原子MPSoC开发板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id692450874670 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html 第十七章 HDMI彩…

基于PLC控制四自由度气动式机械手设计

目 录 1 绪论 1 1.1 机械手的概述 1 1.2 机械手的发展史 1 1.3 气动技术及气动机械手的发展过程 2 1.4 机械手未来的发展趋势 3 1.5 本课题研究内容 4 1.6 课题研究的意义 4 2 机械手的总体设计方案 6 2.1 机械手的工作原理及系统组成 6 2.2 机械手基本形式的选择 7 2.3 驱动机…

VO, DTO, DO, PO四胞胎傻傻分不清楚?那快来看这篇文章!

概念 VO(View Object) 视图对象&#xff0c;用于展示层&#xff0c;作用是把某个指定页面&#xff08;或组件的所有数据封装起来&#xff09;。 DTO(Data Transfer Object) 数据传输对象&#xff0c;这个概念来源于J2EE的设计模式&#xff0c;原来的目的是为了给EJB&#x…

第2关:创建表

为了完成本关任务&#xff0c;你需要掌握&#xff1a;如何使用HBase shell指令创建表。 Hbase shell操作 启动HBase之后&#xff0c;我们输入hbase shell进入到Hbase shell命令行窗口&#xff1a; hbase shell 在这里我们输入hbase shell会启动一个加入了一些Hbase特有命令的…

list模拟实现(15)

目录 1、简单框架 1、list.h 2、test.cpp 2、list迭代器实现 1、list.h 2、test.cpp 3、思考 1、迭代器中的拷贝构造和赋值重载是否需要自己实现&#xff1f;析构呢&#xff1f; 2、体会类型的力量 3、const迭代器实现 1、list.h 2、test.cpp 4、重载迭代器的oper…

【附源码】计算机毕业设计JAVA知识库系统

【附源码】计算机毕业设计JAVA知识库系统 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JAVA mybatis …

python 使用enumerate()函数详解

一、enumerate() 函数简介 enumerate()是python的内置函数&#xff0c;将一个可遍历iterable数据对象(如list列表、tuple元组或str字符串)组合为一个索引序列&#xff0c;同时列出数据和数据下标&#xff0c;一般用在for循环当中。 函数返回一个enumerate对象&#xff0c;是一…

Metabase学习教程:仪表盘-4

交叉筛选&#xff1a;图表联动更新仪表盘筛选器 只需单击几下&#xff0c;就可以配置任何图表或表以更新仪表盘筛选器。 Metabase允许您自定义当您单击仪表盘部件。本文将详细介绍如何设置部件更新仪表盘上筛选器在我们称之为交叉筛选. 下面是我们要连接的仪表盘&#xff1a…

如何使用轻量应用服务器搭建Veno File Manager个人私有云网盘?

之前有介绍过使用可道云搭建个人云网盘系统&#xff1a;如何使用闲置的云服务器搭建一个属于自己的可道云私人云网盘&#xff0c;这个教程我将介绍使用Veno File Manager搭建个人云网盘&#xff0c;搭建的过程很相似&#xff0c;都采用的是宝塔面板作为辅助&#xff0c;可道云搭…

40 行 Python 代码,写一个 CPU

一、引言 CPU 如何工作&#xff1f;是困扰初级用户一个迷雾般的难题。我们可能知道诸如程序计数器、RAM、寄存器的只言片语&#xff0c;但尚未对这些部件的工作原理及整个系统的协同有清晰和总体的认识。 本文使用四十行 Python 代码来实现一个最简单的 CPU。使它可编程&…