Linux下Maven+SVN自動打包腳本


    公司的開發環境每次部署項目都很麻煩,需要手動打包並上傳上去。這個太麻煩了,所以就准備搞個自動打包的腳本。腳本自動從svn代碼庫里面更新最新的代碼下來,然后maven打包,最后把war包丟到tomcat里面去。其實搞個Jenkins就完事了,但是還是想自己寫個腳本玩玩,因此特意記錄下自己寫這些腳本的過程,方便后續查閱。

一、環境介紹

        CentOs6.9 +  svn + maven

二、編寫maven打包腳本

        這里先提一下,公司有個公共的框架項目framework,其他項目都依賴了它。所以其他項目打包前,都需要mvn install 一下這個公共框架項目。 這個 mvn 命令執行后,想獲取是編譯成功還是失敗了,就需要點技巧了。 下面說說怎么獲取mvn install 后是否編譯成功的方案。
    一般來說,如果mvn install 后出現了BUILD SUCCESS字眼,那就說明是編譯成功了。所以我們把 mvn命令的輸出內容直接存放到一個文件中,然后我們在文件中查詢有沒有BUILD SUCCESS這個字符串,如果有就說明是編譯成功了。

        下面為maven install 公共框架framework項目的腳本代碼(/root/workspace/mvnscript/install_framework.sh):
#!/bin/sh 
# this is maven install framework script
echo "[The install framework  script is running.....]"
# go to framework dir
cd /root/workspace/framework

# 定義該腳本的臨時文件的名字
TmpFileName=/tmp/framework_sh_tmp

# 先把原來的這個腳本的臨時文件刪除
rm -rf ${TmpFileName}*

# 獲取當前時間
Time=`date +"%Y%m%d%H%M%S"`

# 把mvn命令的結果在屏幕顯示的同時寫入到文件中,文件名為:上面定義的文件名+當前時間
mvn clean install | tee ${TmpFileName}${Time}

# 文件中查找 BUILD SUCCESS 字眼
result=`grep 'BUILD SUCCESS' ${TmpFileName}${Time}`

# 如果結果為空那就是失敗,否則就成功了
if [ -z "$result" ];
then
 echo "[ install framework error! --------  you can see the log on ${TmpFileName}${Time}]"
 echo "[ ------------------------ script exit!!  ------------------- ] "
 exit
else
 echo "[framework install SUCCESSS] "
fi
echo "[The install framework script is end]"
        下面為maven打包sp項目的腳本代碼( /root/workspace/mvnscript/package_sp.sh ):
#!/bin/sh
# this is maven package sp script
echo "[The package sp script is running.....]"
# go to sp dir
cd /root/workspace/sp

# 定義該腳本的臨時文件的名字
TmpFileName=/tmp/sp_sh_tmp

# 先把原來的這個腳本的臨時文件刪除
rm -rf ${TmpFileName}*

# 獲取當前時間
Time=`date +"%Y%m%d%H%M%S"`

# 把mvn命令的結果在屏幕顯示的同時寫入到文件中,文件名為:上面定義的文件名+當前時間
mvn clean package | tee ${TmpFileName}${Time}

# 文件中查找 BUILD SUCCESS 字眼
result=`grep 'BUILD SUCCESS' ${TmpFileName}${Time}`

# 如果結果為空那就是失敗,否則就成功了
if [ -z "$result" ];
then
 echo "[ package sp error! --------  you can see the log on ${TmpFileName}${Time}]"
 echo "[ ------------------------ script exit!!  ------------------- ] "
 exit
else
 echo "[ sp package SUCCESSS] "
fi
echo "[The package sp script is end]"

        上面這個兩個腳本主要目的其實是為了在執行maven命令的同時獲取maven執行的結果,如果install或者package失敗了,直接給出提示,並退出腳本。
       

三、編寫自動svn更新代碼+maven打包並發布的腳本

    因為sp項目依賴framework項目,所有每次都要先更新framework項目,然后再install。這樣sp項目打包后的framework的依賴才是最新的。
  • 具體步驟為:
    • svn命令更新framework項目
    • svn命令更新sp項目
    • maven命令install公共框架項目framework
    • maven命令打包sp項目
    • 停止tomcat
    • 刪除tomcat里面的項目
    • 把新打包好的項目copy到tomcat中
    • 啟動tomcat
  • 腳本代碼為(/root/deploy_sp.sh):    
# 此腳本用於自動從svn上面更新sp代碼並打包
cd /root/workspace/framework
echo "[ update framework from svn....]"
svn update
cd /root/workspace/sp
echo "[ update sp from svn....]"
svn update
echo "[ maven install framework ....]"
#導入安裝framework腳本
source /root/workspace/mvnscript/install_framework.sh
echo "[ maven package sp....]"
#導入打包sp腳本
source /root/workspace/mvnscript/package_sp.sh
#打包完成后先停止tomcat
/root/tomcat-instance/shutdown_sp.sh
#刪除tomcat里面原來的sp相關的war包和文件夾
rm -rf /root/tomcat-instance/sp-tomcat/webapps/sp*
#copy新的war包到tomcat里面
cp /root/workspace/sp/sp-deploy/target/sp.war /root/tomcat-instance/sp-tomcat/webapps/sp.war
echo "[ sp.war copy SUCCESS ]"
#重新啟動tomcat
/root/tomcat-instance/sp-tomcat/bin/startup.sh
cd ~
echo [" sp deploy SUCCESS "]

    這個腳本代碼里有個好玩的東西就是用了source這個命令來實現類似於靜態包含的功能,把其他腳本的內容導入進來。為什么要用這個東西? 直接調用其他腳本不就好了。

          主要原因是那兩個安裝腳本和打包腳本有退出的功能,如果mvn命令執行失敗,是直接退出了。 如果我直接用調用的方式,就不能實現調用第一個腳本失敗后,退出整個腳本;會出現第二個腳本繼續執行的情況。 這不是我想要的結果,我希望第一個腳本失敗后就直接結束了。因此百度了一下怎么才能實現這種包含的功能,后面發現用source能夠實現把其他腳本的內容導入到當前腳本來執行的功能。 這個和java的jsp的靜態包含的效果是類似的,因為它是相當於把其他腳本的內容拿到當前腳本來執行了,所以第一個腳本執行exit命令就相當於把整個腳本退出了。

    source命令導入功能參考鏈接: http://www.runoob.com/linux/linux-shell-include-file.html

四、小結

    (1)通過查找mvn命令執行后的關鍵字的方法來實現判斷mvn命令是否執行成功
    (2)通過source命令來實現腳本的靜態包含,從而實現導入的腳本中exit時可以退出整個腳本
          (3) 其實也可以通過 $? 來判斷mvn命令的執行結果
  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM