本文是上一篇文章的後續,上一篇只是利用Jenkins部署項目到本地,並啓動,本文是將項目部署到遠程服務器並執行。git
上一篇文章已經介紹了須要安裝的應用及插件,這一篇還須要2個插件,分別是以下插件:spring
這裏須要在 系統管理->系統設置->Publish over SSH配置遠程部署的服務器,如圖:shell
其中參數配置以下:bash
都配置完成後能夠點擊下面Test Configuration進行測試,若是提示Success則證實配置成功。服務器
這裏大體分爲四個部分curl
首先是參數,基本上和上一篇差很少,新增了幾個,有一個和以前的不同,使用的Git Parameter,這裏選擇的分支(branch),以下圖:maven
git沒什麼好說的,和以前同樣,見下圖。工具
這裏配置了要傳到對應服務器的東西,以及須要使用的腳本,見下圖。測試
Exec command腳本代碼以下,這裏也沒什麼好說的,進入對應目錄,將腳本賦予權限,而後執行。ui
cd ${jar_path}/${project_name}/;
chmod 777 start_${project_name}.sh;
./start_${project_name}.sh ${jar_path} ${jar_name} ${spring_profile} ${check_url} ${project_name} ${jdk_path}
複製代碼
這裏就是將項目打包,而後把服務器上shell腳本複製到打包後文件夾,代碼以下:
mvn clean install -Dmaven.test.skip=true;
cp /usr/local/shell/start_jar.sh start_${project_name}.sh;
複製代碼
如圖
運行前,展現一下遠程上傳的腳本,腳本內容並不是本人本身寫的,借鑑了其餘組的腳本:
#!/bin/bash
#export BUILD_ID=dontKillMe這一句很重要,這樣指定了,項目啓動以後纔不會被Jenkins殺掉。
export BUILD_ID=dontKillMe
jar_path=${1}
jar_name=${2}
spring_profile=${3}
check_url=${4}
project_name=${5}
jdk_path=${6}
if [ ! -n "${jar_path}" ] ;then
echo "參數 1. jar_path 爲空"
exit 1
fi
if [ ! -n "${jar_name}" ] ;then
echo "參數 2. jar_name 爲空"
exit 1
fi
if [ ! -n "${spring_profile}" ] ;then
echo "參數 3. spring_profile 爲空"
exit 1
fi
if [ ! -n "${check_url}" ] ;then
echo "參數 4. check_url 爲空"
exit 1
fi
if [ ! -n "${project_name}" ] ;then
echo "參數 5. project_name 爲空"
exit 1
fi
if [ ! -n "${jdk_path}" ] ;then
echo "參數 6. jdk_path 爲空"
exit 1
fi
#Jenkins中編譯好的jar位置
deploy_path=${jar_path}/${project_name}/
#服務檢查
check_attempts=20
check_timeout=6
#進入工做目錄,log會打在該目錄下
cd ${deploy_path}
echo 'deploy_path' ${deploy_path}
#獲取運行編譯好的進程ID,便於咱們在從新部署項目的時候先殺掉之前的進程
pid=$(cat ${deploy_path}/pid)
#殺掉之前可能啓動的項目進程
kill -9 ${pid}
#啓動jar,指定SpringBoot的profiles爲test,後臺啓動
nohup ${jdk_path} -jar -Xms256m -Xmx256m -XX:-HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./logs -Dspring.profiles.active=${spring_profile} ${deploy_path}/${jar_name} >/dev/null &
#將進程ID存入到pid文件中
echo $! > ${deploy_path}/pid
#服務啓動檢測
online=false
echo "檢測服務啓動狀態"
for (( i=1; i<=${check_attempts}; i++ ))
do
code=`curl -sL --connect-timeout 20 --max-time 30 -w "%{http_code}\\n" "${check_url}" -o /dev/null`
echo "服務檢測返回結果:$code"
if [ "${code}" = "200" ]; then
echo "已檢測到服務:${check_url}"
sleep 10
online=true
break
else
echo "未檢測到服務,等待 ${check_timeout} 秒後重試"
sleep ${check_timeout}
fi
done
if $online; then
echo "服務檢查結束,服務啓動正常"
exit 0
else
echo "服務檢查結束,服務啓動失敗"
exit 1
fi
複製代碼
在jenkins部署項目,以下圖,對應參數,分支只有一個master。這裏的測試地址我選擇的是項目首頁,以下:
點擊Build按鈕後,等待處理便可,可能因爲兩個服務器間傳輸文件比較慢的緣由相對時間不是很快。執行結束後見下圖:
整體感受jenkins使用就是一個熟悉了就感受沒那麼難了,我的感受這個工具就是須要慢慢熟悉,一開始是最難入手的。