Jenkins+SpringBoot+Gitee持續集成

 

一 背景

項目採用SpringBoot架構,若是用傳統的構建+發佈的模式,QA要記錄不少的環境配置,作不少機械的操做,容易增長出錯的可能,工做效率比較低。java

爲了解決這個問題,我使用Jenkins做爲持續集成工具,寫了一個Shell腳本,能夠自動清理服務器環境和啓動對應的服務,大大提升了QA部署服務的工做效率。git

二 使用資源

1)Gitee工程、Gitee帳號。(公司項目是用codehub維護,我這裏使用碼雲來演示)web

2)Ubuntu18測試環境服務器。docker

3)Windows10 開發機器。shell

4)Shell腳本,主要功能清理服務器部署環境、啓動服務。服務器

4)Jenkin的web程序包。網絡

三 操做時序圖

四 安裝和設置Jenkins

 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

  部署成功。

五 討論擴展

  • jenkins是主流的持續集成工具,配置簡單,使用方便,配合shell腳本很容易操做服務器。相似的產品也有不少,詳情請來 https://www.oschina.net/p/jenkins/related 瞭解。
  • 這裏是經過java命令啓動jar包,如今虛擬化技術比較流行,能夠配合docker進行持續集成。
  • jenkins的功能還有不少,有時間能夠詳細挖掘一下。

六 參考資料

  https://www.jianshu.com/p/ba09cdc53343

相關文章
相關標籤/搜索