導(dǎo)航
- DevOps之一--自動(dòng)化CI、CD基礎(chǔ)概念
- DevOps之二--Docker快速安裝Jenkins
- DevOps之三--Jenkins + Gitblit +Maven快速構(gòu)建 springboot 項(xiàng)目
- DevOps之四--Publish over SSH遠(yuǎn)程部署
- DevOps之五-- Gitblit 觸發(fā) Jenkins
一、插件安裝
-
首頁(yè) > 系統(tǒng)管理 > 插件管理
搜索Publish over SSH,直接安裝。下圖是我已經(jīng)安裝過的
image.png
二、配置Publish over SSH
1. 首頁(yè) > 系統(tǒng)管理 > 系統(tǒng)配置
-
步驟一安裝插件完成之后,會(huì)在這里生產(chǎn)一個(gè)Publish over SSH的配置項(xiàng)。
image.png
2. 配置詳解
- 配置詳解.png
Passphrase:SSH的密碼
使用用戶名、密碼SSH登錄時(shí),這里輸入用戶名密碼。
使用私鑰登錄時(shí),這里是私鑰的密碼。Path to key:私鑰文件的路徑
Key:私鑰
Name:服務(wù)器名稱(后續(xù) 步驟四 中會(huì)用到)
Hostname:服務(wù)器 IP
Username:登錄服務(wù)器用戶名
Remote Directory:登錄服務(wù)器后的根目錄,后面 Jenkins默認(rèn)發(fā)送 Jar 到此目錄下。
注意:賬號(hào)密碼登錄和 私鑰登錄二選一即可
三、生成啟動(dòng)、停止Jar的 shell 腳本
1. 停用老版本stop.sh
#!/bin/bash
echo "=================stop SpringBoot DeviceLink================"
pid=`ps -ef | grep devicelink-2.1.jar | grep -v grep | awk '{print $2}'`
echo “舊應(yīng)用進(jìn)程id:$pid”
if [ -n "$pid" ]
then
kill -9 $pid
fi
2. 啟動(dòng)新版本 run.sh
#!/bin/bash
export JAVA_HOME=/usr/java/jdk1.8.0_191-amd64
jarName=devicelink-2.1.jar
chmod 777 ${jarName}
nohup ${JAVA_HOME}/bin/java -Xms1024M -Xmx1024M -jar ${jarName} > nohup.out &
- 注意:stop.sh 和 run.sh 的存放路徑,步驟四 要用到此路徑
四、配置構(gòu)建任務(wù)觸發(fā)遠(yuǎn)程部署
1. 首頁(yè) > 構(gòu)建任務(wù)名稱 > 配置 > Post Steps
可根據(jù)實(shí)際需求選擇。
Run only if build succeeds:僅在構(gòu)建成功時(shí)運(yùn)行
Run only if build succeeds or is unstable:僅在構(gòu)建成功或不穩(wěn)定時(shí)運(yùn)行
-
Run regardless of build result:無(wú)論構(gòu)建結(jié)果如何運(yùn)行
2. 遠(yuǎn)程部署配置詳解
-
點(diǎn)擊 Add post-build step > Send files or execute commands over SSH
遠(yuǎn)程部署詳解.png Name:選擇 步驟二 的服務(wù)器名
Source files:要部署的源文件。這里的路徑相對(duì)于 Jenkins的工作路徑
例如:
構(gòu)建生成的JARJenkins_home/workspace/JenkinsBuild/devicelink/target/devicelink-2.1.jar
這里需要輸入devicelink/target/devicelink-2.1.jar 或使用通配符** /devicelink-2.1.jar
Jenkins工作目錄是Jenkins_home/workspace/JenkinsBuild/Remove prefix:移除指定前綴。
例如:
配置移除devicelink/target,JAR文件會(huì)發(fā)送到 /home/run/devlk/(步驟二的RemoteDirectory + RemoteDirectory)下,否則會(huì)發(fā)送到 /home/run/devlk/devicelink/target/ 下(不存在的路徑會(huì)自動(dòng)創(chuàng)建)。RemoteDirectory: JAR部署目錄。
注意! 此目錄是基于之前設(shè)置服務(wù)器時(shí)設(shè)置遠(yuǎn)程目錄的,即這里的目錄是位于服務(wù)器設(shè)置目錄下的相對(duì)目錄。最終部署目錄 /home/run/devlk/ (步驟二的RemoteDirectory + 當(dāng)前RemoteDirectory)Exec command:輸入要執(zhí)行的linux 命令
例如:
source /etc/profile
cd /home/run/devlk/
chmod 775 *.sh
BUILD_ID=devicelink
./stop.sh
./run.sh
echo "=============部署完成============="
3.【踩坑】部署目錄
問題:JAR包發(fā)送到服務(wù)器的位置不對(duì)
解決方案:調(diào)整 步驟二 和 步驟四 的 RemoteDirectory,最終的目錄是連個(gè) RemoteDirectory 拼接起來的。
4. 【踩坑】shell 腳本不執(zhí)行
問題:JAR 發(fā)送到服務(wù)器后,沒有執(zhí)行 Exec Command內(nèi)的 linux 指令或 shell 腳本
解決方案:
1、在Exec command 區(qū)添加source /etc/profile,加上它是可以讓.sh腳本執(zhí)行。
2、在execute shell輸入框中加入BUILD_ID=DONTKILLME,可防止jenkins殺死啟動(dòng)的進(jìn)程。
3、給.sh 文件授執(zhí)行權(quán)限 chmod 775 *.sh
4、注意.sh 腳本存放位置
-------------------------至此遠(yuǎn)程部署結(jié)束------------------------




