1. 程式人生 > 實用技巧 >springBoot 專案 Jenkins+svn 整合部署

springBoot 專案 Jenkins+svn 整合部署

持續整合工具Jenkins
持續部署、持續整合、持續交付
Jenkins 和 Hudson 都是一款持續整合及自動化部署工具。
Jenkins 解決了什麼問題:
Jenkins 的主要目標是監控軟體開發流程,快速顯示問題。所以能保證開發人員以及相
關人員省時省力提高開發效率。
解決了傳統的打包、部署枯燥過程。

Jenkins 主要用於
1.持續、自動地構建/測試軟體專案
2. 監控一些定時執行的任務

Jenkins 歷史
Jenkins 和 Hudson 之間的關係,2009年,甲骨文收購了sun公司並集成了Hudson程式碼庫。在2011年年初,甲骨文和開源社群之間關係破裂,該專案分為兩個獨立的專案。
Jenkins: 由大部分原始開發人員組成
Hudson:由甲骨文公司繼續管理
所以 Jenkins 和 Hudson 是兩款非常相似的產品

流程圖

Red hat 安裝Jenkins
jenkins下載 https://pkg.jenkins.io/redhat-stable/
下載rpm包到本地
sudo rpm -ih jenkins-2.222.3-1.1.noarch.rpm


自動安裝完成之後:
/usr/lib/jenkins/jenkins.war WAR包
/etc/sysconfig/jenkins 配置檔案
/var/lib/jenkins/ 預設的JENKINS_HOME目錄
/var/log/jenkins/jenkins.log Jenkins日誌檔案

安裝完成之後啟動jenkins, 可能報這個錯誤,這是由於沒有配置java環境,先檢查一下java虛擬機器有沒有安裝,如果沒有就安裝


解決辦法在 vim /etc/init.d/jenkins
在第一行新增java環境,紅色框中為自己的路徑


為了避免jenkins預設埠衝突,修改enkins預設埠
執行 vi /etc/sysconfig/jenkins
找到 JENKINS_PORT="8080" 此埠不衝突可以不修改
修改jenkins預設的操作使用者,linux下jenkins預設使用jenkins使用者進行指令碼和檔案的操作,如果不修改,在部署專案時需要調整涉及到的檔案和目錄的操作許可權,可以調整jenkins配置檔案,將使用者修改為root使用者。
將JENKINS_USER="jenkins"調整為JENKINS_USER="root"
然後執行啟動命令
sudo service jenkins start


然後訪問:http://ip/8081
如果訪問不到,檢查伺服器的防火牆是否關閉。


接著 :cd /var/lib/jenkins/secrets


進入此頁面後,需要配置一下允許使用者註冊,Configure Global Security ,勾選此處,儲存。


接著配置jdk 、maven、及setting.xml


需要安裝 Subversion 和 Deploy to container 外掛,如果無法安裝提示Update information obtained: 不可用 ago;
其原因是無法上網,可檢查 ping www.baidu.com 如果無法ping通,需要設定DNS
命令: vim /etc/resolv.conf 修改檔案中nameserver為 8.8.8.8 和 8.8.4.4 儲存退出 :wq


再次檢查 ping www.baidu.com
開始構建部署springboot的jar專案

  1. 回到jenkins主頁面,點選新建Item


-Dmaven.test.skip=true 忽略測試
然後點選頁面下方的應用,並儲存。接著設定全域性配置進入jekins 主頁面,點選左側 Manage Jenkins進入頁面後點擊Configure System 系統配置
再次操作之前,需要安裝 Publish over SSH 外掛,


點選高階 勾選


以上配置完後,點選Test Configuretion 測試一下

之後我們去job中配置一下ssh,



此處的順序需要注意一下,shell 指令碼需要放在下面。
shell 指令碼內容:

#!/bin/sh
#Copy jar to target path
BUILD_ID=DONTKILLME #後臺執行
pid=$(ps -ef|grep ene-center.jar|grep -v grep | awk '{print $2}')
#copy jar 到啟動目錄
#cp -r /var/lib/jenkins/workspace/ene-center/target/ene-center.jar  /data/test/em
# 關閉已經啟動的jar程序
function stop(){
if [ -n "$pid" ]
  then
        echo "pid程序 :$pid"
        kill -9 $pid
 else
    echo "程序沒有啟動"
fi
}
stop
sleep 5s
#釋出jar服務
function start(){
  cd /data/test/em
  nohup java -jar ene-center.jar --server.port=5010 >center.log 2>&1 &
}
start

然後,應用並儲存,在jenkins 任務列表頁面點選構建,

前後端shell 指令碼

  • 前端指令碼
#!/bin/bash

root="/data/test/ene"
for project in {"ene-center","ene-auth","ene-gateway","ene-basic","ene-sys"}
do
	echo
	echo
	echo
	echo $project"開始部署..."



	BUILD_ID=DONTKILLME
	
	pid=$(ps -ef|grep $project.jar|grep -v grep | awk '{print $2}')
	
	
	
	
	function stop(){
	if [ -n "$pid" ]
	  then
	        echo "關閉程序pid=:$pid"
	        kill -9 $pid
	
	 else
	    echo "未啟動,不需要kill"
	fi
	}

	file="${root}/$project/target/${project}.jar"
	if [ -e $file ]
	then 
		echo "原始檔案路徑:${root}/$project/target/${project}.jar...已找到"
	else 
		echo "原始位置 ${root}/$project/target/${project}.jar...不存在,停止部署!"
		continue
	fi
	echo "移動jar到 ${root}/_jar/$project.jar"
	mv -f ${root}/$project/target/${project}.jar ${root}/_jar 


	function start(){
	  cd $root
	  echo "開始啟動..."
	  nohup java -jar _jar/$project.jar > _jar/$project.log 2>&1 &
	}
	
	stop
	
	sleep 3s
	
	
	start


done

echo "指令碼執行完畢!!!!!!"
echo 
echo 
echo 

  • 後端指令碼
#!/bin/bash

BUILD_ID=DONTKILLME
cd /var/lib/jenkins/workspace/ene-vue/ene-vue
npm install
npm install script-ext-html-webpack-plugin
npm run build:prod
rm -rf /data/test/dist
rm -rf /data/test/ene-vue
mv /var/lib/jenkins/workspace/ene-vue/ene-vue/dist /data/test
cd /data/test
mv dist ene-vue