前言
最近又重新弄了一下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
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