补丁包是大多数项目型产品在其运行的生命周期内进行日常维护必不可少的手段之一,在产品的运维中扮演着非常重要的作用
当产品在生产花环境稳定运行的过程出现了功能性或非功能性bug,而客户方并不打算在短期内重新考虑升级计划时,对于产品开发者,可以在修复原版本产品bug基础上,进行增量补丁包的发布
关于补丁包的做法,不同的语言和不同的技术框架也有所差别,本篇以目前Java开发中比较通用的springboot框架为例,通过一个简单的案例进行说明
assembly + antrun
首先简单说明下这两个组件,也可以理解为使用这两个插件做补丁包的构建。
assembly : 我们一般java工程都是通过Maven来管理构建的,要使用的时候就使用了jar形式,而我们知道其中有很多的依赖,而Maven本身的打包成jar是不包含这些依赖的,我们可以在pom.xml中配置maven-assembly-plugin来实现依赖打包;
antrun : 程序的pom文件中引入了antrun插件之后,可以帮助我们在打包的时候,灵活而方便的对项目工程中的各个模块文件进行各种操作,比如自定义文件拷贝目录,即做到动态管理各种资源文件
基于maven,快速搭建一个简单的聚合工程,本工程包含3部分,web模块,core模块和build打包模块,模拟真实工程,甚至还可以创建更多模块
1、根pom依赖
org.springframework.boot
spring-boot-dependencies
${spring-boot-version}
pom
import
org.apache.maven.plugins
maven-compiler-plugin
1.8
org.apache.maven.plugins
maven-jar-plugin
2.4
2.0.14.0
本项目作为演示案例,并没有引入过多依赖,因此只导入了springboot-web,可以结合实际需要继续添加
2、web模块pom依赖
assmblytest
com.congge
1.0-SNAPSHOT
4.0.0
web
org.springframework.boot
spring-boot-starter-web
org.apache.maven.plugins
maven-jar-plugin
*.properties
*.yml
false
com.congge.App
false
conf/
org.apache.maven.plugins
maven-assembly-plugin
2.4
build-bin
package
single
assembly.xml
assmbly
false
false
src/main/resources
true
assembly文件,可以理解为定义项目资源文件目录的描述元信息,比如说,你即将要打的补丁包里面的一些class文件,一些配置文件,甚至数据库脚本等
比如我这里,在web模块下,指定的assembly文件就在web的根目录下
bin
false
dir
tar.gz
false
lib
runtime
..
config/
unix
bootstrap.yml
0755
target/classes
config
*.properties
0755
在实际项目中,可能其他的除了web之外的模块也需要进行资源文件的补丁包打包,也可以像上面这样同样的操作即可
3、build模块pom依赖
build模块可以单独作为构建补丁包的模块进行统一管理,这样做的好处是,补丁包的最终出处在这个模块下,里面可以进行各种文件的管理,比如jar包目录,class文件目录,甚至各种启动脚本等
pom依赖
assmblytest
com.congge
1.0-SNAPSHOT
4.0.0
bulid
org.springframework.boot
spring-boot-starter-web
deploy
true
org.apache.maven.plugins
maven-assembly-plugin
2.6
build-bin
package
single
gnu
assembly.xml
target
assmblytest
false
org.apache.maven.plugins
maven-antrun-plugin
1.7
package
run
patch.yaml ,用于描述补丁包中解决的bug等信息,通常根据自己项目规范即可
build.xml 制作补丁包时最终补丁包文件的位置信息描述,即可以理解为补丁包中的文件包括哪些?这些文件从哪里来?
一旦当你的描述信息正确无误时候,运行maven命令时候,ant插件就会按照描述信息将补丁包制作好,如下是一个标准的样板文件,可根据自身需要进行修改即可使用
最后,让我们来运行一下maven打包命令,看看效果如何,执行如下命令:
mvn clean package -U -DskipTests
到这一步,我们完成了补丁包的制作,但这个是比较粗略的,真正项目中,还需要遵循公司的规范,比如补丁包的命名规范
同时,通过此例,可以看到,该补丁包属于增量补丁包,后续的流程是,通过shell命令,解压补丁包,将补丁包内的各个层级的文件,比如配置文件,依次替换生产环境下匹配目录下的文件,最后重启服务即可
本篇到此结束,最后感谢观看!