使用Jenkins + Gitlab自動構建Spring Boot項目,並部署到遠程服務器上

前言

最近又重新弄了一下jenkins,雖然之前也有弄過但是都是在本地服務器部署,而且記錄的不夠詳細,因此這次將寫下詳細部署過程。

 

一、下載並啓動Jenkins

下載地址:https://jenkins.io/download/   ,選擇下載war包

下載完成後用FTP上傳到服務器上輸入啓動命令:nohup java -jar jenkins.war --httpPort=7070  > jenkins.out 2>&1 & ,後面參數是啓動端口。

啓動完成後瀏覽器打開http://ip:7070  進入jenkins操作頁面,此時會出現一個頁面要求你輸入密碼,此時回到linux控制檯,輸入tail -100f jenkins.out 查看啓動日誌,注意看日誌,它會打印你的初始密碼,複製初始密碼並點下一步,後面的操作按提示來就可以了,可以安裝推薦的插件也可以自己選,下面將進入JENKINS配置步驟。

 

二、配置JENKINS

 

點擊jenkins 系統管理->插件管理  點擊available(可選插件)選項卡 ,在右上角的搜索框搜索並安裝如下幾個插件:

1、Git plugin  Git client plugin

2、Maven Integration plugin

3、Publish Over SSH

4、Gitlab Hook Plugin(可選)

 

再次點擊JENKINS的系統管理 -> 系統設置 ,找到Publish over SSH這一欄,如下圖配置要發佈到該服務器上的連接配置

參數說明:

  name:可以隨便起          hostname:連接IP地址          Remote Directory: 遠程文件夾路徑,發佈的項目將會在此目錄下    

  username:賬號  password:密碼  ,  除了用賬號密碼連接外還可以通過private key連接,由於麻煩我在這選擇了賬號密碼連接

 

全局工具配置

這個是基礎配置,可不能忘了,分別配置它的JDK  GIT  和MAVEN,如果本機已經有了,則輸入安裝路徑即可,如果沒有可以使用JENKINS的自動安裝功能 ,看下圖:

自動安裝和手動配置二選一。

 

三、Jenkins任務配置

新建一個Jenkins任務,輸入你的任務名稱點確定,然後點配置進入該任務的配置頁面。

1、配置源碼管理:

  

 

找到源碼管理點GIT,輸入你的項目的GIT URL,如http://localhost:80/project.git  ,下面的Credentials是憑據,點添加然後輸入登陸gitlab的賬號密碼

 

2、配置Build 

  找到Build一欄,分別配置好Root POM和Goals and options  ,root pom是你項目的pom.xml,goals and options是mvn的執行命令,可以填 :install -DskipTests ,不需要填mvn xxx

 

3、配置Post Steps

  選擇Add post-build step -> Send files or execute commands over SSH  ,然後如下圖 配置:

1、name是之前我們在系統配置裏添加的遠程服務器配置

2、Source files是哪些文件將被髮布到遠程服務器,可以使用匹配符如:**/*.jar   or   **/project.jar ,推薦這樣填 :**/*.jar,build.sh (將build.sh也打包的因爲是發佈完可以直接運行該腳本)

3、Remove prefix是要刪除的前綴文件夾,例:project/target/p.jar  輸入移除前綴:project/target,那麼部署後就不會有移除的那些文件夾路徑了,推薦不要填,因爲它不支持匹配符,只能填死路徑 。

4、Exec commond是發佈完成後要執行的shell命令,一般用它調用寫好的sh腳本,對了如果這裏沒有Exec command這一欄的話,回到系統配置,找到之前配置遠程服務器的地方點開高級配置,把disable exec 取消勾選。

一切準備就緒,最後填寫build.sh!

四、Build.sh 重啓腳本

 

這個腳本調了我很久,一開始不是沒執行完就結束要麼就是啓動沒反應,該腳本的大致作用是查找該目錄下的所有jar文件,並使用nohup java -jar 啓動,同時保存它的進程PID,下次啓動前先獲取PID 調用 KILL命令。

下面上腳本 ,代碼上面有說明大家可以根據需要修改。

#!/bin/bash -ilex
#jenkin編譯時調用的shell,僅使用在測試服務器上
#export BUILD_ID=dontKillMe這一句很重要,這樣指定了,項目啓動之後纔不會被Jenkins殺掉。
source /etc/profile
#用於保存啓動服務的PID
pid_path=/pids
#如果PID目錄不存在,則創建
if [ ! -d "${pid_path}" ]; then
  mkdir ${pid_path}
fi
#遍歷文件夾獲取jar
for file in `find  * -name "*.jar"`
do
#Jenkins中編譯好的jar名稱 
jar_name=${file##*/}
#獲取運行編譯好的進程ID,便於我們在重新部署項目的時候先殺掉以前的進程
pid=$(cat ${pid_path}/${jar_name}.pid) 

#rm -f ${www_path}/${jar_name}
#殺掉以前可能啓動的項目進程 
kill -9 ${pid} 
echo $jar_name
#啓動jar,後臺啓動 
#BUILD_ID=dontKillMe
BUILD_ID=dontKillMe nohup java -Xmx512m -Xms512m -Xmn200m -jar ${file} > ${jar_name%-*.*.*-SNAPSHOT.jar}.out 2>&1 & 
#將進程ID存入到ufind-web.pid文件中 (pid統一路徑)
echo $! > ${pid_path}/${jar_name}.pid 

done

大功告成,最後點立即構建試試效果吧!

PS:JENKINS支持定時自動構建和檢測GITLAB代碼變動自動構建,由於我目前使用的是多結構的maven工程,一次變動會導致所有項目重新打包,因此並沒有使用這個功能,有需要的朋友可以搜索jenkins + gitlab webhook 通過gitlab的接口觸發jenkins自動構建

 

2019-5-21更新升級了shell腳本=======================================

現在支持參數了,根據參數掃描指定的jar包,使用代碼如:bash build.sh "service*.jar" "serviceB*.jar"

 

build.sh:

#!/bin/bash -ilex
#export BUILD_ID=dontKillMe這一句很重要,這樣指定了,項目啓動之後纔不會被Jenkins殺掉。
export BUILD_ID=dontKillMe
source /etc/profile
pid_path=/PID
function findJar()
{
	#遍歷文件夾獲取jar
	for file in `find  * -name "${1}"`
	do
	#Jenkins中編譯好的jar名稱 
	jar_name=${file##*/}
	#獲取運行編譯好的進程ID,便於我們在重新部署項目的時候先殺掉以前的進程
	pid=$(cat ${pid_path}/${jar_name}.pid) 
	#rm -f ${www_path}/${jar_name}
	#殺掉以前可能啓動的項目進程 
	kill -9 ${pid} 
	#啓動jar,後臺啓動 
	#BUILD_ID=dontKillMe
	BUILD_ID=dontKillMe nohup java -Xmx512m -Xms512m -Xmn200m -jar ${file} > ${jar_name%-*.*.*-SNAPSHOT.jar}.out 2>&1 & 
	echo $! > ${pid_path}/${jar_name}.pid 
	done
}

#如果PID目錄不存在,則創建
if [ ! -d "${pid_path}" ]; then
  mkdir ${pid_path}
fi
if [ $# -gt 0 ] ;then
	for regx in $*
	do
	findJar $regx
	done
else
	findJar "*.jar"
fi

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章