1. 程式人生 > >Jenkins部署碼雲SpringBoot專案到遠端伺服器

Jenkins部署碼雲SpringBoot專案到遠端伺服器

本文是上一篇文章的後續,上一篇只是利用Jenkins部署專案到本地,並啟動,本文是將專案部署到遠端伺服器並執行。

1.環境準備

1.1 安裝外掛

上一篇文章已經介紹了需要安裝的應用及外掛,這一篇還需要2個外掛,分別是如下外掛:

  • Git Parameter Plug-In :這個外掛用於獲取git上資訊,如分支和標籤
  • Publish Over SSH :這個外掛用於將本地檔案傳送到遠端伺服器

1.2 環境配置

這裡需要在 系統管理->系統設定->Publish over SSH配置遠端部署的伺服器,如圖:

其中引數配置如下:

  • Passphrase :遠端伺服器密碼
  • Name :這個就是給遠端連線起個名
  • Hostname :遠端伺服器地址
  • Username :遠端伺服器使用者名稱
  • Remote Directory :上傳檔案路徑

都配置完成後可以點選下面Test Configuration進行測試,如果提示Success則證明配置成功。

2.專案配置

這裡大致分為四個部分

2.1 引數

首先是引數,基本上和上一篇差不多,新增了幾個,有一個和之前的不一樣,使用的Git Parameter,這裡選擇的分支(branch),如下圖:

2.2 Git

git沒什麼好說的,和之前一樣,見下圖。

2.3 Build Environment

這裡配置了要傳到對應伺服器的東西,以及需要使用的指令碼,見下圖。

Exec command指令碼程式碼如下,這裡也沒什麼好說的,進入對應目錄,將指令碼賦予許可權,然後執行。

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}

2.4 Build

這裡就是將專案打包,然後把伺服器上shell指令碼複製到打包後文件夾,程式碼如下:

mvn clean install -Dmaven.test.skip=true;
cp /usr/local/shell/start_jar.sh start_${project_name}.sh;

如圖

3.測試執行

執行前,展示一下遠端上傳的指令碼,指令碼內容並非本人自己寫的,借鑑了其他組的指令碼:

#!/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按鈕後,等待處理即可,可能由於兩個伺服器間傳輸檔案比較慢的原因相對時間不是很快。執行結束後見下圖:


然後訪問http://47.98.109.195:8888/可以看到下圖:

4.總結

總體感覺jenkins使用就是一個熟悉了就感覺沒那麼難了,個人感覺這個工具就是需要慢慢熟悉,一開始是最難入手的。