场景说明
本项目中微服务项目共30+个工程包,开发环境开发人员只需启动一个web工程、service工程,而部署时如上图所示需要增加eureka、zuul等配置,如果将每个包进行单独修改配置文件,修改过多容易出错,这时最好能够进行一次修改,之后能够一键打包。
打包环境
工程是基于maven创建的,所以打包环境首选需要maven。文件替换我这里有ant所以直接使用ant做svn下载、文件替换(也可以直接使用bat命令)
查看maven版本:mvn -version
查看ant版本:ant -version
编写脚本
1、准备需要替换的文件
创建replaceFile文件夹,文件夹中按照工程名进行创建文件夹并放入需要替换的文件
application.yml:进行修改的有服务名context-path、端口、数据库链接、eureka相关配置、其他微服务链接、redis相关配置等
pom.xml:解决打包特殊文件名
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.meta</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
<include>**/*.yml</include>
</includes>
</resource>
</resources>
</build>
XXXXXXX_ServiceApplication.java启动文件:对service工程增加eureka支持@EnableEurekaClient (web工程不需要)
2、编写ant脚本进行svn下载、文件替换(可以改成bat命令)
创建createPackage.bat、createPackage.xml文件,createPackage.bat中执行ant命令
call ant -f createPackage.xml
createPackage.xml中编写svn下载以及文件替换,通过svnSetting命令下载检出svn到bin文件夹
<?xml version="1.0" encoding="GBK"?>
<project name="createPackage" default="packageMain" basedir=".">
<property name="binDir" value="bin"/>
<property name="replaceDir" value="replaceFile"/>
<property name="packageDir" value="release"/>
<property name="entityDir" value="entity"/>
<property name="webCommonDir" value="webCommon"/>
<property name="serviceCommonDir" value="serviceCommon"/>
<property name="revision" value="HEAD"/>
<property name="svn.url" value="填写svn地址/trunk/12Source" />
<property name="svn.user" value="填写svn账号" />
<property name="svn.password" value="填写svn密码" />
<typedef resource="org/tigris/subversion/svnant/svnantlib.xml"/>
<svnSetting javahl="false" svnkit="true" username="${svn.user}" password="${svn.password}" id="svn.settings"/>
<target name="clean">
<echo>清理历史数据,请稍后...</echo>
<delete dir="${packageDir}"></delete>
<delete dir="${binDir}"></delete>
<mkdir dir="${packageDir}"></mkdir>
<mkdir dir="${binDir}"></mkdir>
</target>
<target name="packageMain" depends="clean">
<echo>开始从 ${svn.url} 检出源码,请稍后...</echo>
<svn refid="svn.settings">
<export srcUrl="${svn.url}" destPath="${binDir}" revision="${revision}" force="true"/>
</svn>
<echo>检出完成....</echo>
<echo>移动XXXXService_DA工程:</echo>
<echo>移动entity实体类</echo>
<copy todir="${binDir}/XXXXService_DA/src/main/java/com/muyunfei">
<fileset dir="${binDir}/XXXX_entity_common/src/main/java/com/muyunfei">
<include name="entity/**" />
<include name="vo/**" />
</fileset>
</copy>
<echo>移动XXX_service_common公共服务</echo>
<copy todir="${binDir}/XXXXService_DA/src/main/java/com/muyunfei" >
<fileset dir="${binDir}/XXX_service_common/src/main/java/com/muyunfei">
<include name="XXXX_service_common/**" />
<include name="serviceCommon/**" />
</fileset>
</copy>
<echo>删除原有application.yml文件</echo>
<delete file="${binDir}/XXXXService_DA/src/main/resources/application.yml"/>
<echo>替换yml文件</echo>
<copy todir="${binDir}/XXXXService_DA/src/main/resources" >
<fileset dir="${replaceDir}/XXXXService_DA">
<include name="application.yml" />
</fileset>
</copy>
<echo>删除原有pom.xml文件</echo>
<delete file="${binDir}/XXXXService_DA/pom.xml"/>
<echo>替换pom.xml文件</echo>
<copy todir="${binDir}/XXXService_DA" >
<fileset dir="${replaceDir}/XXXService_DA">
<include name="pom.xml" />
</fileset>
</copy>
<echo>删除原有XXXXService_DAServiceApplication启动文件</echo>
<delete file="${binDir}/XXXXService_DA/src/main/java/com/muyunfei/XXXXService_DA/XXXService_DAServiceApplication.java"/>
<echo>替换启动文件</echo>
<copy todir="${binDir}/XXService_DA/src/main/java/com/muyunfei/XXXService_DA" >
<fileset dir="${replaceDir}/XXXService_DA">
<include name="XXXService_DAServiceApplication.java" />
</fileset>
</copy>
<echo>完成工程移动</echo>
<echo>移动XXXXService_SD工程:</echo>
/***其他工程**/
/***其他工程**/
/***其他工程**/
/***其他工程**/
</target></project>
3、编写mvn打包脚本
创建executeMaven.bat批处理命令,执行mvn打包并且将成功打包的文件放入release中
set appname=
if not defined %1 (
set appname=%1
)
cd bin/%appname%
echo "执行maven打包"
call mvn clean package -U -Dmaven.test.skip=true -Dmaven.javadoc.skip=true
echo "移动jar、war文件"
cd ../
cd ../
copy "bin\%appname%\target\" "release/"
dir
echo "release/%appname%-0.0.1-SNAPSHOT.jar.original"
del /a/f/q "release\%appname%-0.0.1-SNAPSHOT.jar.original"
del /a/f/q "release\%appname%-0.0.1-SNAPSHOT.war.original"
echo "%appname%打包成功,放入release中"
4、编写主入口文件
所有工作准备好后,创建一键打包的主入口文件,通过call命令进行顺序执行打包命令,首先执行ant批处理名进行替换文件,接下来逐个执行打包
call createPackage
call executeMaven xxxxService_DA
call executeMaven xxxxService_SD
call executeMaven xxxxService_YC
call executeMaven xxxxService_Main
call executeMaven xxxxWeb_DA
call executeMaven xxxxWeb_SD
call executeMaven xxxxWeb_YC
call executeMaven xxxxWeb_Main
pause
执行完成后就可以将release中的文件拿到服务器部署啦
(接下来感兴趣的读者可以再通过ant编写一个“一键发布”,将jar、war上传到相应的服务器,然后执行nohuo java -jar XXXX进行一键发布)
来源:CSDN
作者:牟云飞
链接:https://blog.csdn.net/myfmyfmyfmyf/article/details/80429458