項目採用SpringBoot架構,若是用傳統的構建+發佈的模式,QA要記錄不少的環境配置,作不少機械的操做,容易增長出錯的可能,工做效率比較低。java
爲了解決這個問題,我使用Jenkins做爲持續集成工具,寫了一個Shell腳本,能夠自動清理服務器環境和啓動對應的服務,大大提升了QA部署服務的工做效率。git
1)Gitee工程、Gitee帳號。(公司項目是用codehub維護,我這裏使用碼雲來演示)web
2)Ubuntu18測試環境服務器。docker
3)Windows10 開發機器。shell
4)Shell腳本,主要功能清理服務器部署環境、啓動服務。服務器
4)Jenkin的web程序包。網絡
1)下載jenkins.war架構
下載地址:https://jenkins.io/download/jvm
頁面下部,點擊紅框裏面的文件下載。maven
2)啓動Jenkins
在任一安裝了java環境的機器上均可以啓動jenkins程序包
java -jar jenkins.war
在控制檯會jenkins會輸出初始化密鑰
一樣能夠去電腦對應的文件目錄裏面找到這個key
b111033f1a404d799251929b4db3e14f
3)安裝Jenkins
jenkins默認8080端口,訪問 http://127.0.0.1:8080,輸入上面的初始化密鑰
點擊繼續,
選擇安裝推薦的插件
網絡快的話,大概幾分鐘
建立一個本身的用戶,保存並繼續,
保存繼續,
完成設置。
4)設置Jenkins
選擇 可選插件
安裝這幾個[Pipeline Maven Integration]、[Maven Integration]、[Publish Over SSH]和[Gitee]。
勾選並選擇直接安裝。
拉到頁面的下部,配置遠程測試服務器,
增長服務配置,
分配設置maven配置文件、jdk目錄、git安裝目錄和maven目錄。
本身電腦上安裝了git後,會默認讀取git的安裝進程的
輸入一個名字,例如我輸入:helloPudding
進入配置頁面,配置源代碼,
構建環境中,選擇 [Send files or execute commands over SSH after the build runs]
分兩步操做
第一步 清理服務器環境 和 第二步 啓動服務
服務器opt目錄的樹形結構是
goaloneService.sh 的腳步內容以下:
#!/bin/sh ## java env export JAVA_HOME=/lib/jvm/jdk1.8.0_181 export JRE_HOME=$JAVA_HOME/jre ## exec shell name EXEC_SHELL_NAME=$1\.sh ## service name SERVICE_NAME=$1 SERVICE_DIR=/opt JAR_NAME=$SERVICE_NAME\-0.0.1-SNAPSHOT.jar TIME_STR=$(date +%Y%m%d%H%M%S) PID=pid/$SERVICE_NAME\.pid WORK_DIR=$SERVICE_DIR/servicespace/$1 #function start start(){ cd $WORK_DIR if [ ! -d "log" ]; then mkdir log fi nohup $JRE_HOME/bin/java -Xms256m -Xmx512m -jar $JAR_NAME > log/$SERVICE_NAME.out 2>&1 & echo $! > $PID echo "**************** start $SERVICE_NAME success ****************" } # function stop stop(){ cd $WORK_DIR if [ -f "$PID" ]; then kill `cat $PID` rm -rf $PID fi echo "**************** stop $SERVICE_NAME ****************" sleep 6 TEMP_PID=`ps -ef | grep -w "$SERVICE_NAME" | grep "java" | awk '{print $2}'` if [ "$TEMP_PID" = "" ]; then echo "**************** $SERVICE_NAME process not exists or stop success ****************" else echo "**************** $SERVICE_NAME process pid is [$TEMP_PID] ****************" kill -9 $TEMP_PID fi echo "**************** stop $SERVICE_NAME success ****************" } # function clean clean(){ cd $WORK_DIR if [ ! -d "lastDeploy" ]; then mkdir lastDeploy fi if [ -f "$JAR_NAME" ]; then mv $JAR_NAME lastDeploy/$JAR_NAME$TIME_STR fi } case "$2" in start) start ;; stop) stop ;; restart) stop sleep 2 start echo "**************** restart $SERVICE_NAME success ****************" ;; clean) stop sleep 2 clean echo "**************** clean $SERVICE_NAME success ****************" ;; *) ## restart stop sleep 2 start ;; esac exit 0
配置maven打包命令,並跳過單元測試。
控制檯輸出部分日誌:
[INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 3.670 s [INFO] Finished at: 2018-08-30T18:25:56+08:00 [INFO] Final Memory: 35M/333M [INFO] ------------------------------------------------------------------------ Waiting for Jenkins to finish collecting data [JENKINS] Archiving C:\Users\xxx\.jenkins\workspace\helloPudding\pom.xml to com.goalone/helloPudding/0.0.1-SNAPSHOT/helloPudding-0.0.1-SNAPSHOT.pom [JENKINS] Archiving C:\Users\xxx\.jenkins\workspace\helloPudding\target\helloPudding-0.0.1-SNAPSHOT.jar to com.goalone/helloPudding/0.0.1-SNAPSHOT/helloPudding-0.0.1-SNAPSHOT.jar SSH: Connecting from host [DESKTOP-DFCKDKK] SSH: Connecting with configuration [Test182] ... channel stopped SSH: EXEC: STDOUT/STDERR from command [cd /opt sh ./goaloneService.sh helloPudding clean] ... **************** stop helloPudding **************** **************** helloPudding process not exists or stop success **************** **************** stop helloPudding success **************** **************** clean helloPudding success **************** SSH: EXEC: completed after 8,230 ms SSH: EXEC: STDOUT/STDERR from command [cd /opt sh ./goaloneService.sh helloPudding start] ... **************** start helloPudding success **************** SSH: EXEC: completed after 202 ms SSH: Disconnecting configuration [Test182] ... SSH: Transferred 1 ( 0 + 1 ) file(s) Finished: SUCCESS
部署成功。
https://www.jianshu.com/p/ba09cdc53343