微服务框架一键打包,实现开发、部署环境分离

百般思念 提交于 2019-12-08 23:56:15

场景说明

本项目中微服务项目共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进行一键发布)

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!