以前團隊每次構建應用都要通過Eclipse/STS匯出war包,然後再上傳到伺服器,拷貝到tomcat,還要手動停止/啟動tomcat服務,實在麻煩,還非常容易出錯。
我利用gitlab、maven、docker工具,加上一個shell指令碼,做了個簡單的自動構建工具。
1.首先安裝jdk 64版、maven,修改/etc/profile檔案如下:
JAVA_HOME=/home/git/jdk1.8.0_161JRE_HOME=$JAVA_HOME/jre#CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/libCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/rt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib/rt.jarexport MAVEN_HOME=/home/git/src/apache-maven-3.5.2PATH=$JAVA_HOME/bin:/home/git/apache-maven-3.5.2/bin:$PATHexport JAVA_HOME CLASSPATH JRE_HOME PATHTZ='Asia/Shanghai'; export TZ
2.安裝docker,並利用docker安裝gitlab,可以參考我以前的部落格。https://blog.csdn.net/jzd1997/article/details/79297250
2.1 下載tomcat鏡像,並啟動。
sudo docker pull tomcatsudo docker cp /etc/localtime gitlab:/etc/localtime #解決容器和主機時間不一致問題sudo docker run -d -p 8080:8080 --name customer tomcat
啟動後可以進入docker tomcat執行個體,確認tomcat存放位置。
sudo docker exec -it customer /bin/bash
root@f945b6723f41:/usr/local/tomcat# cd webapps/
root@f945b6723f41:/usr/local/tomcat/webapps# pwd
/usr/local/tomcat/webapps
root@f945b6723f41:/usr/local/tomcat/webapps# ls
CumstomerManage ROOT examples manager
CumstomerManage.war docs host-manager
root@f945b6723f41:/usr/local/tomcat/webapps#
3.編寫自動構建指令檔。
#!/bin/bash#切換目錄cd ~/customermanage_web/#拉取最新代碼git pull#產生war包mvn package -Dmaven.test.skip=truesudo docker restart customer#拷貝war包sudo docker cp ~/customermanage_web/target/CumstomerManage.war customer:/usr/local/tomcat/webapps#重啟tomcatsudo docker restart customer
完成後添加指令碼執行許可權。
chmod 755 deploy_customer.sh
ps.這個地方還解決了一個mvn打包編譯問題,mvn packge的時候提示 [Maven]package com.sun.image.codec.jpeg does not exist
原因為Oracle在jdk7以後就對com.sun的所有包都退休了。
Synopsis: The Non-standard com.sun.image.codec.jpeg Package is RetiredDescription: The com.sun.image.codec.jpeg package was added in JDK 1.2 (Dec 1998) as a non-standard way of controlling the loading and saving of JPEG format image files. This package was never part of the platform specification and it has been removed from the Java SE 7 release. The Java Image I/O API was added to the JDK 1.4 release as a standard API and eliminated the need for the com.sun.image.codec.jpeg package.
解決這個問題只需要在pom檔案當中添加
<plugin><artifactId>maven-compiler-plugin</artifactId><version>2.5.1</version><configuration><compilerArgument>-XDignore.symbol.file</compilerArgument> </configuration>
4. 執行指令碼,確認執行結果
./deploy_customer.sh
5. 剛才team member用了下覺得很方便,然後又提出了一個小需求,希望每天自動產生daily build版本,測試第二天一早就可以驗證最新的代碼,實現也很簡單,在crontab中添加定時任務。
crontab -e# m h dom mon dow command0 1 * * * /home/git/deploy_customer.sh
第一個參數是分,第二個參數是小時,後面幾個*代表每天運行。
到這裡就結束後,後續如果有時間準備再折騰下Jenkins,實現持續整合。