Jenkins部署SpringBoot應用到遠端伺服器
Jenkins部署SpringBoot應用到遠端伺服器
使用SpringBoot、SpringCloud寫後臺服務,也引入了當下比較流行的微服務的理念,模組也比較多。為了方便前期測試和後期線上部署更新,使用Jenkins作為持續整合工具。
結構
伺服器結構
- 測試機器:若干臺外網測試或者生產主機。
- Jenkins伺服器:搭建Jenkins伺服器主機
- git程式碼庫: 我這裡使用的碼雲
測試環境目錄結構
在根目錄下建立data
/data: 專案總目錄
/data/exec:執行指令碼目錄
/data/pid:記錄各個程式執行時pid
/data/work:專案應用程式存放目錄
目錄結構思路
- 使用maven構建專案
- 構建後使用Publish Over SSH部署到遠端伺服器:
- 關閉應用
- 備份應用到lastDepoly目錄
- 上傳新版本的Jar包(或者war包)
- 啟動應用
- 其中,關閉、備份、刪除和啟動應用都是由指令碼來完成, 部署指令碼 deploy.sh 放在 /data/exec下(內容見 相關指令碼 章節)。
- Pushlish Over SSH的執行順序是先上傳檔案再執行指令碼,所以對於每個應用每個伺服器我都設定了兩個 Transfer Set :
- 先執行清理指令碼:關閉,備份和刪除舊版應用jar包
deploy.sh cps-platform-1.0.0 clean
- 再執行啟動指令碼啟動應用
deploy.sh chl-tss start
cps-platform-1.0.0 為專案打包的名稱,替換自己的 *.jar 名稱即可。
jenkins
下載Jenkins
在https://jenkins.io/download/下載Jenkins的最新版本。建議下載LTS(LongTermSuport) jenkins.war。
建立Jenkins目錄結構,部署到jenkins伺服器
在Jenkins伺服器上建立以下結構
| - /jenkins/
| + pid # 記錄jenkins執行pid
| + conf # jenkins工作目錄
| + log
| jenkins.sh # jenkins.sh是為了方便啟動和停止jenkins伺服器
| jenkins.war
- 啟動jenkins :
./jenkins.sh start
- 關閉jenkins:
./jenkins.sh stop
將下載的jenkins.war包上傳到Jenkins伺服器上,使用一下命令啟動:
nohup java -Xms256m -Xmx1024m -XX:MaxPermSize=512m -jar jenkins.war --ajp13Port=-1 --httpPort=8099 > jenkins.out 2>&1 &
–httpPort=8099指定jenkins啟動監聽的埠,這裡更改為8099(預設是8080)。
-Xms256m -Xmx1024m -XX:MaxPermSize=512m 設定了JVM引數(需要因環境而異)。
基本安裝的過程就不詳細的說了,這裡也可以參考一下,springboot 使用Jenkins實現自動化部署 是使用tomcat部署
增加 Publish Over SSH 外掛
在 系統設定->外掛管理->可選外掛 搜尋 Publish Over SSH,選中點選立即安裝即可安裝。
設定SSH遠端伺服器
點選“高階”即可設定Push Over SSH的埠和密碼
- 勾選“Use password authentication, or use a different key”
- Passphrase / Password 設定密碼
- Port 設定埠
專案配置
構建環境中勾選 Send files or execute commands over SSH after the build runs,然後點選 Add Server,即可新增目標遠端伺服器:
- Name:新增的遠端伺服器
- Source files:需要上傳的檔案,可以使用萬用字元和Jenkins變數。
- Exec command:在遠端伺服器上執行的指令碼,這裡我的想法是,先清理一下遠端伺服器,關閉服務並備份程式。
cd /data/exec
sh ./deploy.sh cps-platform-1.0.0 clean
點選Add Transfer Set,新增一組設定:
- Source files:需要上傳的檔案。**/cps-platform-1.0.0.jar。即maven打包生成後的jar包檔案。路徑相對於maven工程的根目錄。
- Exec command:在遠端伺服器上執行的指令碼。這裡需要先上傳檔案到伺服器,再執行啟動指令碼
cd /data/exec
sh ./deploy.sh cps-platform-1.0.0 start
- 點開“高階”之後勾選上 Flatten files,扁平化檔案。只上傳檔案,不上傳檔案所屬資料夾。否則上傳到遠端資料夾之後就會多一級 target 目錄。
相關指令碼
jenkins.sh
#!/bin/sh
## java env
export JAVA_HOME=/usr/java/jdk1.8.0_261-amd64
export JRE_HOME=$JAVA_HOME/jre
export JENKINS_HOME=/jenkins/conf
## exec shell name
EXEC_SHELL_NAME=jenkins\.sh
## service name
SERVICE_NAME=jenkins
SERVICE_DIR=/jenkins
JAR_NAME=$SERVICE_NAME\.war
PID=pid/$SERVICE_NAME\.pid
cd $SERVICE_DIR
case "$1" in
start)
nohup java -Xms256m -Xmx1024m -XX:MaxPermSize=512m -jar $JAR_NAME --ajp13Port=-1 --httpPort=8099 > log/jenkins.out 2>&1 &
echo $! > $SERVICE_DIR/$PID
echo "#### start $SERVICE_NAME"
;;
stop)
kill `cat $SERVICE_DIR/$PID`
rm -rf $SERVICE_DIR/$PID
echo "#### stop $SERVICE_NAME"
sleep 8
TEMP_PID=`ps -ef | grep -w "$SERVICE_NAME" | grep "java" | awk '{print $2}'`
if [ "$TEMP_PID" == "" ]; then
echo "#### $SERVICE_NAME process not exists or stop success"
else
echo "#### $SERVICE_NAME process pid is:$TEMP_PID"
kill -9 $TEMP_PID
fi
;;
restart)
$0 stop
sleep 2
$0 start
echo "#### restart $SERVICE_NAME"
;;
esac
exit 0
deploy.sh
#!/bin/sh
## java env
export JAVA_HOME=/usr/java/jdk1.8.0_261-amd64
export JRE_HOME=$JAVA_HOME/jre
## exec shell name
EXEC_SHELL_NAME=$1\.sh
## service name
SERVICE_NAME=$1
SERVICE_DIR=/data
JAR_NAME=$SERVICE_DIR/$SERVICE_NAME\.jar
PID=pid/$SERVICE_NAME\.pid
WORK_DIR=$SERVICE_DIR/work
#function start
start(){
cd $WORK_DIR
if [ ! -d "log" ]; then
mkdir log
fi
nohup $JRE_HOME/bin/java -Xms256m -Xmx512m -jar $JAR_NAME --spring.profiles.active=test >log/$SERVICE_NAME.out 2>&1 &
echo $! > $SERVICE_DIR/$PID
echo "#### start $SERVICE_NAME"
}
# function stop
stop(){
cd $WORK_DIR
if [ -f "$SERVICE_DIR/$PID" ]; then
kill `cat $SERVICE_DIR/$PID`
rm -rf $SERVICE_DIR/$PID
fi
echo "#### stop $SERVICE_NAME"
sleep 6
TEMP_PID=`ps -ef | grep -w "$SERVICE_NAME" | grep "java" | awk '{print $2}'`
echo "#### TEMP_PID $TEMP_PID"
if [ "$TEMP_PID" == "" ]; then
echo "#### $SERVICE_NAME process not exists or stop success"
else
echo "#### $SERVICE_NAME process pid is:$TEMP_PID ."
kill -9 $TEMP_PID
fi
}
# function clean
clean(){
cd $WORK_DIR
if [ ! -d "lastDeploy" ]; then
mkdir lastDeploy
else
rm lastDeploy/$SERVICE_NAME*
fi
if [ -f "$JAR_NAME" ]; then
mv $JAR_NAME lastDeploy
fi
}
case "$2" in
start)
start
;;
stop)
stop
;;
restart)
stop
sleep 2
start
echo "#### restart $SERVICE_NAME"
;;
clean)
stop
sleep 2
clean
echo "#### clean $SERVICE_NAME"
;;
*)
## restart
stop
sleep 2
start
;;
esac
exit 0
相關文章
- Mac Jenkins 部署 SpringBoot 應用到遠端伺服器MacJenkinsSpring Boot伺服器
- 再見命令列!一鍵部署應用到遠端伺服器,IDEA官方Docker外掛真香!命令列伺服器IdeaDocker
- Jenkins部署Web專案到遠端tomcatJenkinsWebTomcat
- Jenkins 流水線遠端部署 .NET Core/Framework 到 IISJenkinsFramework
- Jenkins + Docker + Gitee自動化部署SpringBoot應用JenkinsDockerGiteeSpring Boot
- 使用flask開發RESTful架構的api伺服器端(5)–部署flask應用到nginxFlaskREST架構API伺服器Nginx
- 部署ASP.NET到遠端IIS伺服器ASP.NET伺服器
- Win10搭建Jenkins部署Java專案(本機和遠端Win10部署)Win10JenkinsJava
- 遠端部署應用程式:一臺伺服器執行兩個tomcat伺服器Tomcat
- Jenkins部署碼雲SpringBoot專案JenkinsSpring Boot
- 用Maven部署war包到遠端Tomcat伺服器MavenTomcat伺服器
- 阿里雲部署redis伺服器,以及遠端訪問阿里Redis伺服器
- 用 Jenkins 部署 PHP 應用JenkinsPHP
- Django遠端部署--命令收集Django
- 遠端部署python程式Python
- 伺服器無響應 遠端登入伺服器工具伺服器
- 阿里出品!SpringBoot應用自動化部署神器,IDEA版Jenkins?阿里Spring BootIdeaJenkins
- 遠端Jenkins新增Mac電腦節點JenkinsMac
- 配置 IDEA 遠端連線應用伺服器Idea伺服器
- Jenkins+Docker+Gitee+SpringBoot自動化部署JenkinsDockerGiteeSpring Boot
- MongoDB 在windows伺服器安裝部署與遠端訪問配置MongoDBWindows伺服器
- Maven遠端Tomcat熱部署MavenTomcat熱部署
- 【zabbix】zabbix遠端安裝部署
- 遠端監控Springboot JVMSpring BootJVM
- FastDFS伺服器叢集部署和整合客戶端到SpringBootAST伺服器客戶端Spring Boot
- Rdp遠端桌面簡介,利用遠端桌面連線遠端伺服器的方法伺服器
- 怎麼登入遠端伺服器 遠端登入VPS伺服器伺服器
- Jenkins自動化部署SpringBoot多模組專案JenkinsSpring Boot
- 部署Dotnet Core應用到Kubernetes(一)
- 部署Dotnet Core應用到Kubernetes(二)
- 搭建git遠端伺服器Git伺服器
- fabric實現遠端操作和部署
- Jenkins部署Jenkins
- win10遠端桌面連線 伺服器批次遠端Win10伺服器
- win7遠端桌面連線 伺服器批次遠端Win7伺服器
- VNC遠端連線,如何VNC遠端連線伺服器VNC伺服器
- Rd遠端桌面簡介,利用rd遠端桌面連線遠端伺服器的方法伺服器
- 遠端觸發Jenkins的Pipeline任務Jenkins