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專案
- 回到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