1. 程式人生 > >微服務框架一鍵打包,實現開發、部署環境分離

微服務框架一鍵打包,實現開發、部署環境分離


場景說明

本專案中微服務專案共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>移動ywsdService_DA工程:</echo>
			<echo>移動entity實體類</echo>
			<copy todir="${binDir}/ywsdService_DA/src/main/java/com/haiyisoft">
			   <fileset dir="${binDir}/ywsd_entity_common/src/main/java/com/haiyisoft">
				 <include name="entity/**" />
				 <include name="vo/**" />
			   </fileset>
			</copy>
			<echo>移動ywsd_service_common公共服務</echo>
			<copy todir="${binDir}/ywsdService_DA/src/main/java/com/haiyisoft" >
			   <fileset dir="${binDir}/ywsd_service_common/src/main/java/com/haiyisoft">
				 <include name="ywsd_service_common/**" />
				 <include name="serviceCommon/**" />
			   </fileset>
			</copy>
			<echo>刪除原有application.yml檔案</echo>
			<delete file="${binDir}/ywsdService_DA/src/main/resources/application.yml"/>
			<echo>替換yml檔案</echo>
			<copy todir="${binDir}/ywsdService_DA/src/main/resources" >
			   <fileset dir="${replaceDir}/ywsdService_DA">
				 <include name="application.yml" />
			   </fileset>
			</copy>
			<echo>刪除原有pom.xml檔案</echo>
			<delete file="${binDir}/ywsdService_DA/pom.xml"/>
			<echo>替換pom.xml檔案</echo>
			<copy todir="${binDir}/ywsdService_DA" >
			   <fileset dir="${replaceDir}/ywsdService_DA">
				 <include name="pom.xml" />
			   </fileset>
			</copy>
			<echo>刪除原有YwsdService_DAServiceApplication啟動檔案</echo>
			<delete file="${binDir}/ywsdService_DA/src/main/java/com/haiyisoft/ywsdService_DA/YwsdService_DAServiceApplication.java"/>
			<echo>替換啟動檔案</echo>
			<copy todir="${binDir}/ywsdService_DA/src/main/java/com/haiyisoft/ywsdService_DA" >
			   <fileset dir="${replaceDir}/ywsdService_DA">
				 <include name="YwsdService_DAServiceApplication.java" />
			   </fileset>
			</copy>
			<echo>完成工程移動</echo>
		<echo>移動ywsdService_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 ywsdService_DA
call executeMaven ywsdService_SD
call executeMaven ywsdService_YC
call executeMaven ywsdService_Main
call executeMaven ywsdWeb_DA
call executeMaven ywsdWeb_SD
call executeMaven ywsdWeb_YC
call executeMaven ywsdWeb_Main

pause

執行完成後就可以將release中的檔案拿到伺服器部署啦


(接下來感興趣的讀者可以再通過ant編寫一個“一鍵釋出”,將jar、war上傳到相應的伺服器,然後執行nohuo java -jar XXXX進行一鍵釋出)