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



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM