阿里雲+GitLab+Jenkins自動化部署SpringBoot項目

1.Jenkins介紹

Jenkins是一個開源軟件項目,是基於Java開發的一種持續集成工具,用於監控持續重複的工做,旨在提供一個開放易用的軟件平臺,使軟件的持續集成變成可能。 (以上介紹來源於百度百科)java

其實通俗來講,Jenkins就是一個自動化部署項目的工具,幫我省去重複的運維工做。git

2.環境準備

部署環境須要的工具,安裝的資料網上都有不少,能夠自行安裝配置web

  • JDK

  • Git

  • Maven

環境變量spring

Java的環境變量我沒配置,我安裝的jdk版本環境變量自動有了docker

  • Jenkins

jenkins安裝方式常見的有三種shell

1.在官網下載war包部署在tomcat中apache

2.經過docker部署瀏覽器

3.經過yum install jenkins 安裝tomcat

我選用的是第三種。安裝步驟以下安全

sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
sudo rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key
sudo yum install jenkins

 

service jenkins start  啓動
service jenkins stop   中止
service jenkins restart  重啓

而後訪問http://${ip}/8080,能夠看到jenkins那個小老頭,根據自行配置安裝插件,其中密碼在這裏

vi /var/lib/jenkins/secrets/initialAdminPassword

記得在阿里雲上開放端口

3.Jenkins工具插件配置

3.1 插件配置

我的建議,Jenkins第一次進入推薦安裝的插件就默認安裝就行,省的還須要後續本身安裝,固然,若是本身安裝的話須要Maven和Git插件。

3.2 全局工具配置

  • Maven 

  • JDK

  • Git

由於SpringBoot是以jar的形式發佈自帶tomcat,因此不須要配置tomcat容器了。

4.配置項目

4.1 構建自由風格的項目

新建項目,選擇構建自由風格的項目,給項目起個名字,而後點擊Ok。

4.2 配置參數化構建過程

這裏我用到了幾個參數,由於可能有時須要提早準備好參數在進行構建,以下圖:

  • jar_path :本意是準備項目打包後的jar位置,其實這裏是Jenkins工做空間
  • spring_profile:這個是讀取配置文件前綴,好比dev,test,prod
  • jar_name:jar包名稱
  • project_name:項目名稱

4.3 Git配置

用Git進行將項目Clone下來,配置本身的用戶密碼,Repository URL配置git地址(這裏提供的地址是在gitlab上隨意建立的SpringBoot項目,項目沒什麼特別)

4.4 構建

這裏選擇執行Shell,內容以下:

mvn clean install -Dmaven.test.skip=true
echo $spring_profile $jar_path $jar_name
cd /usr/local/shell/
./stop.sh $jar_name
echo "Execute shell Finish"
./startup.sh $spring_profile $jar_path $jar_name $project_name

在上面執行的Shell裏面還用到了兩個Shell,分別是stop.sh,實質就是找到jar執行的pid,而後kill,具體內容以下:

jar_name=${1}
echo "Stopping" ${jar_name}
pid=`ps -ef | grep ${jar_name} | grep -v grep | awk '{print $2}'`
if [ -n "$pid" ]
then
echo "kill -9 的pid:" $pid
kill -9 $pid
fi

startup.sh內容以下,具體能夠根據狀況修改:

spring_profile=${1}
jar_path=${2}
jar_name=${3}
project_name=${4}
cd ${jar_path}/${project_name}/target/
echo ${jar_path}/${project_name}/target/
echo nohup java -jar ${jar_name} &
BUILD_ID=dontKillMe nohup java -jar ${jar_name} --spring.profiles.active=${spring_profile} &

以上兩個文件記得設置好權限,否則構建的時候會報錯。

碰到的小插曲,Jenkins內沒法使用mvn,報錯mvn:command not found,這裏的解決方式是添加軟連接,將mvn命令也指向/usr/bin/mvn,以下:

ln -s /usr//apache-maven-3.6.0/bin/mvn /usr/bin/mvn

5 測試運行

5.1 運行

點擊運行後,如圖所示,剛剛預配置的參數均可以看到並能夠修改,這裏咱們用默認配置好的就能夠。

構建成功後瀏覽器訪問項目地址,正常顯示

6 Gitlab的webhook自動構建

6.1 Jenkins全局安全配置

須要在Jenkins上配置容許匿名用戶訪問

 

 

6.2 GitLab配置

這裏的URL地址填寫Jenkins項目構建觸發器的地址帶上token,而後選擇觸發器(通常選擇push和merge就能夠了)

點擊測試返回201則成功。

而後查看Jenkins就會有一條構建記錄

若是失敗,我碰到的問題有下面幾個

1.地址路徑參數不對

2.Jenkins安全設置沒有勾選運行匿名訪問

7 總結

整體過程坑其實仍是不少的,老是出現不一樣的問題,可是網上通常都有解決辦法,前人也是同樣踩過坑的,後面會把docker引進來。

大致結構

  1. 開發人員在gitLab上打了一個tag
  2. gitLab把tag事件推送到Jenkins
  3. Jenkins 獲取tag源碼,編譯,打包,構建鏡像
  4. Jenkins push 鏡像到阿里雲倉庫
  5. Jenkins 執行遠程腳本
    5-1. 遠程服務器 pull 指定鏡像
    5-2. 中止老版本容器,啓動新版本容器
  6. 通知測試人員部署結果
相關文章
相關標籤/搜索