微服務框架一鍵打包,實現開發、部署環境分離
場景說明
本專案中微服務專案共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進行一鍵釋出)