阿里雲+GitLab+Jenkins部署SpringBoot專案
1.Jenkins介紹
Jenkins是一個開源軟體專案,是基於Java開發的一種持續整合工具,用於監控持續重複的工作,旨在提供一個開放易用的軟體平臺,使軟體的持續整合變成可能。 (以上介紹來源於百度百科)
其實通俗來說,Jenkins就是一個自動化部署專案的工具,幫我省去重複的運維工作。
2.環境準備
部署環境需要的工具,安裝的資料網上都有很多,可以自行安裝配置
- JDK
- Git
- Maven
環境變數
Java的環境變數我沒配置,我安裝的jdk版本環境變數自動有了
- Jenkins
jenkins安裝方式常見的有三種
1.在官網下載war包部署在tomcat中
2.通過docker部署
3.通過yum install jenkins 安裝
我選用的是第三種。安裝步驟如下
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,內容如下:
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} &
以上兩個檔案記得設定好許可權,不然構建的時候會報錯。
這裡我是通過兩步驟完成一是先構建然後執行shell,當然也可以一步到位 把構建的命令加到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
但是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引進來。
大體結構
- 開發人員在gitLab上打了一個tag
- gitLab把tag事件推送到Jenkins
- Jenkins 獲取tag原始碼,編譯,打包,構建映象
- Jenkins push 映象到阿里雲倉庫
- Jenkins 執行遠端指令碼
5-1. 遠端伺服器 pull 指定映象
5-2. 停止老版本容器,啟動新版本容器 - 通知測試人員部署結果