文章目錄
- 前言
- 一、創建節點池節點/接入新節點
- 二、創建構建計劃
- 1.選擇簡易模板
- 2.選擇對應的git倉庫,點擊確定即可
- 3.流程配置
- 4.觸發規則
- 5.Linux shell腳本 auto_server.sh
- 6.docker鏡像中 shell腳本 demo.sh
- 三、立即構建
- 總結
前言
在專案測驗階段,我們經常要部署測驗環境,第一步先拉去測驗分支的最新代碼;第二步mvn clean install打包jar/war包;第三步通過一些ftp工具傳輸到局域網的linux上,第四步拷貝進docker鏡像;第五步java -jar啟動jar包/啟動tomcat等等…繁瑣的程序,今天我們就來一鍵完成這個操作,使用Coding的構建計劃,加上shell腳本來實作,自動拉代碼;自動打包;自動傳輸;自動拷貝替換;自動執行重啟腳本等一整套自動部署流程,
一、創建節點池節點/接入新節點
此步驟在coding說明檔案里有,按檔案操作即可,此處不做詳細介紹,參考

接入新節點成功后,可以看到占用狀態為閑置

二、創建構建計劃
1.選擇簡易模板

2.選擇對應的git倉庫,點擊確定即可

3.流程配置
直接進入第三步構建->執行Shell腳本,修改為專案所需要的腳本,我的專案是:
mvn clean
mvn package

然后是收集構建物,根據專案的架構而定,單應用部署的,收集一次構建物即可,找到對應的jar/war包即可,

多應用則添加一個收集構建物流程,同理配置一下即可,

到這里構建的配置已完成,接下來配置部署流程,直接查看執行Pipeline腳本

這里推薦使用文本編輯器配置,螢屏大一些

語法使用的是Jenkins,我這邊的Linux是使用私鑰登錄的,需要提前把id_rsa配置為專案憑據,參考
可以把對應的一些服務器資訊,配置到環境變數里

stage('部署') {
steps {
echo '部署中...'
script {
def remoteConfig = [:]
remoteConfig.name = "ssh-server"
remoteConfig.host = "${env.REMOTE_HOST}"
remoteConfig.port = "${env.REMOTE_PORT}".toInteger()
remoteConfig.user = "${env.REMOTE_USER_NAME}"
remoteConfig.allowAnyHosts = true
// Linux私鑰登錄
withCredentials([sshUserPrivateKey(
credentialsId: "${env.REMOTE_CRED}",
keyFileVariable: "id_rsa"
)]) {
remoteConfig.identityFile = id_rsa
sshPut(remote: remoteConfig, from: "/target/demo-server.jar", into: "/home")
sshCommand(remote: remoteConfig, command: "/home/auto_server.sh")
}
}
echo '部署完成'
}
}
4.觸發規則
指定對應的分支,一般使用手動觸發,當然你可以根據需求選擇,

5.Linux shell腳本 auto_server.sh
呼叫Linux的shell腳本,實作把jar包拷貝進docker鏡像里,再呼叫docker鏡像中的shell腳本,
#!/bin/sh
#docker name
DOCKER_NAME=test
#file dir
FILE_DIR=/home/demo-server.jar
#project dir
PROJECT_DIR=/usr/local
#get docker cid
CID=$(docker ps | grep "$DOCKER_NAME" | awk '{print $1}')
docker cp $FILE_DIR $CID:$PROJECT_DIR
docker exec -i $CID /bin/bash -c 'cd /usr/local && ./demo.sh restart'
6.docker鏡像中 shell腳本 demo.sh
這里是spring boot打包后的jar包
#!/bin/sh
#post
POST=8080
#app_name
API_NAME=demo
#jar_name
JAR_NAME=$API_NAME\.jar
#log_name
LOG_NAME=$API_NAME\.log
#MetaspaceSize
METASPACE_SIZE=2048m
#MaxMetaspaceSize
MAXMETASPACE_SIZE=2048m
#SurvivorRatio
SURVIVOR_RATIO=8
#garbage collector
GARBAGE_COLLECTOR=UseConcMarkSweepGC
#Xms
XMS=2048m
#Xmx
XMX=2048m
#Xmn
XMN=512m
#Xss
XSS=512k
#java opts
JAVA_OPTS="-XX:MetaspaceSize=${METASPACE_SIZE} -XX:MaxMetaspaceSize=${MAXMETASPACE_SIZE} -XX:SurvivorRatio=${SURVIVOR_RATIO} -XX:+${GARBAGE_COLLECTOR} -Xms${XMS} -Xmx${XMX} -Xmn${XMN} -Xss${XSS} -Dfile.encoding=utf-8 -Dserver.servlet.contextPath= -Dserver.port=${POST} -Dspring.application.name=${API_NAME}"
#pid
PID=0
#is_exist
is_exist(){
PID=`ps -ef|grep $JAR_NAME|grep -v grep|awk '{print $2}'`
if [ -z "${PID}" ]; then
return 1
else
return 0
fi
}
#start
start() {
is_exist
if [ $? -eq "0" ]; then
echo "${JAR_NAME} is already running PID=${PID}"
else
nohup /usr/bin/java $JAVA_OPTS -jar /usr/local/$JAR_NAME > $LOG_NAME 2>&1 &
echo "[OK]"
fi
}
#stop
stop() {
is_exist
kill $PID
sleep 2
is_exist
if [ $? -eq "0" ]; then
echo "${JAR_NAME} begin kill, PID=${PID}"
kill -9 $PID
sleep 2
echo "${JAR_NAME} process stopped"
else
echo "${JAR_NAME} is not running"
fi
}
#status
status() {
is_exist
if [ $? -eq "0" ]; then
echo "${JAR_NAME} is running PID is ${PID}"
else
echo "${JAR_NAME} is not running"
fi
}
#restart
restart(){
stop
start
}
case $1 in
start)
start
;;
stop)
stop
;;
restart)
$0 stop
sleep 2
$0 start
;;
status)
status
;;
*)
echo "Usage: {start|stop|restart|status}"
;;
esac
exit 0
三、立即構建


構建成功則已經完成自動部署!
總結
Coding服務器執行:拉去對應分支最新代碼;
Coding客戶端:執行構建流程(后端:mvn clean install,前端vue:npm i)、執行部署流程(連接上Linux服務器,把檔案傳輸進去,且可以呼叫shell腳本)
Linux局域網服務器:撰寫shell腳本實作備份、替換jar/war包、啟動jar包等等(前提是局域網是可以上網的),
原創,禁止轉載!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/345616.html
標籤:其他
上一篇:Linux安裝Java環境
下一篇:CentOS安裝python3
