個(gè)人網(wǎng)站設(shè)計(jì)實(shí)驗(yàn)原理qq推廣工具
??博主介紹:Java領(lǐng)域優(yōu)質(zhì)創(chuàng)作者,博客之星城市賽道TOP20、專注于前端流行技術(shù)框架、Java后端技術(shù)領(lǐng)域、項(xiàng)目實(shí)戰(zhàn)運(yùn)維以及GIS地理信息領(lǐng)域。
🍅文末獲取源碼下載地址🍅
👇🏻 精彩專欄推薦訂閱👇🏻 歡迎點(diǎn)贊收藏評(píng)論拍磚........
【Docker Swarm總結(jié)】《容器技術(shù) Docker+K8S專欄》?
【uniapp+uinicloud多用戶社區(qū)博客實(shí)戰(zhàn)項(xiàng)目】《完整開發(fā)文檔-從零到完整項(xiàng)目》?
【Springcloud Alibaba微服務(wù)分布式架構(gòu) | Spring Cloud】《系列教程-更新完畢》?
【SpringSecurity-從入門到精通】《學(xué)習(xí)完整筆記-附(完整demo源碼)》?
【從零開始Vue項(xiàng)目中使用MapboxGL開發(fā)三維地圖教程】《系列教程-不定時(shí)更新》?
【Vue.js學(xué)習(xí)詳細(xì)課程系列】《共32節(jié)專欄收錄內(nèi)容》?
感興趣的可以先收藏起來相關(guān)問題都可以給我留言咨詢,希望幫助更多的人。
目錄
一、前提
二、jenkins自動(dòng)部署vue前端項(xiàng)目
2.1 jenkins上安裝nodejs插件
2.2 全局工具配置實(shí)現(xiàn)nodejs配置
2.3 新建任務(wù)
2.4 任務(wù)配置
2.5 打包完成
三、jenkins自動(dòng)部署springboot后端項(xiàng)目
3.1 構(gòu)建一個(gè)maven項(xiàng)目
3.2 General配置
3.3 源碼管理
3. 4 Build構(gòu)建
3.5 Post Steps
3.6 構(gòu)建后操作
3.7 腳本參考
四、結(jié)論
一、前提
本地虛擬機(jī)上安裝了centos7,在centos7上安裝了docker、docker-compose、jenkins等鏡像。安裝過程可參考我以前寫的文章:CSDN
二、jenkins自動(dòng)部署vue前端項(xiàng)目
2.1 jenkins上安裝nodejs插件
在jenkins具備Publish Over SSH的基礎(chǔ)上,在jenkins上安裝nodejs插件
?
?
安裝成功后的效果:
?
2.2 全局工具配置實(shí)現(xiàn)nodejs配置
?
點(diǎn)擊nodeJs安裝--新增NodeJS
?
可實(shí)現(xiàn)配置多個(gè)。
nodejs配置完成,下邊就可以去開始搭建vue前端項(xiàng)目一鍵部署了。
2.3 新建任務(wù)
?
?
2.4 任務(wù)配置
General配置
?
git參數(shù)構(gòu)建:
?
源碼管理配置
?
?
構(gòu)建環(huán)境配置
?
構(gòu)建步驟中提供2個(gè)配置
- 執(zhí)行shell
- Send files or execute commands over SSH
?
#!/bin/bash
echo $PATH# 查看版本信息
node -V
npm -v
rm -rf node modules
rm -rf dist
npm cache clear --force# jenkins 拉取代碼存放地址在/var/jenkins home/workspace/j-vue3
echo“拉取代碼存放地址”
pwd
# 將代碼
# 將像源替換為淘寶的加速訪問
npm install -g cnpm --registry=https://registry.npm.taobao.org
# 查看配置:
# npm config list
# 安裝項(xiàng)目依賴
cnpm install
# 項(xiàng)目打包
echo "開始vue編譯打包"
cnpm run build:dev
echo "結(jié)束vue編譯打包"
# 進(jìn)入打包目錄
# cd dist
# rm -rf *,tar.gz
# tar -zcvf dist,tar.gz *
# cd ../
echo "構(gòu)建結(jié)束"
?
2.5 打包完成
以上為本地實(shí)踐配置,親測(cè)有效。
三、jenkins自動(dòng)部署springboot后端項(xiàng)目
docker中安裝mysql、redis、jdk的詳細(xì)教程請(qǐng)參考我的文章:
Docker安裝詳細(xì)步驟及相關(guān)環(huán)境安裝配置(mysql、jdk、redis、自己的私有倉庫Gitlab 、C和C++環(huán)境以及Nginx服務(wù)代理)-CSDN博客
3.1 構(gòu)建一個(gè)maven項(xiàng)目
3.2 General配置
實(shí)現(xiàn)參數(shù)化構(gòu)建過程
3.3 源碼管理
3. 4 Build構(gòu)建
clean package -Dmaven.test.skip=true
3.5 Post Steps
只在構(gòu)建成功時(shí)才運(yùn)行。
3.6 構(gòu)建后操作
本地的目錄如下:
其中主要子目錄:
backup:是在本次部署時(shí),將原有的部署文件備份的位置
build:如上方截圖,將從gitee上拉取的代碼編譯后的jar文件放置的位置
shell:放置.sh腳本的位置
nohup.out:運(yùn)行日志文件
最后一個(gè)標(biāo)紅的jar文件:是本次部署運(yùn)行的jar文件,是通過腳本從build中獲取的
3.7 腳本參考
#!/bin/bash
set -e# 基礎(chǔ)
export JAVA_HOME=/home/java/jdk1.8.0_361
export PATH=PATH=$PATH:$JAVA_HOME/bin
# export CLASSPATH=$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarDATE=$(date +%Y%m%d%H%M)
# 基礎(chǔ)路徑
BASE_PATH=/home/work/projects/ydemo-server
# 編譯后 jar 的地址。部署時(shí),Jenkins 會(huì)上傳 jar 包到該目錄下
SOURCE_PATH=$BASE_PATH/build
# 服務(wù)名稱。同時(shí)約定部署服務(wù)的 jar 包名字也為它。
SERVER_NAME=ydemo-server
# 環(huán)境
PROFILES_ACTIVE=local
# 健康檢查 URL
# HEALTH_CHECK_URL=http://127.0.0.1:8078/actuator/health/# heapError 存放路徑
HEAP_ERROR_PATH=$BASE_PATH/heapError
# JVM 參數(shù)
JAVA_OPS="-Xms1024m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$HEAP_ERROR_PATH"
# JavaAgent 參數(shù)。可用于配置 SkyWalking 等鏈路追蹤
JAVA_AGENT=# 備份
function backup() {# 如果不存在,則無需備份if [ ! -f "$BASE_PATH/$SERVER_NAME.jar" ]; thenecho "[backup] $BASE_PATH/$SERVER_NAME.jar 不存在,跳過備份"# 如果存在,則備份到 backup 目錄下,使用時(shí)間作為后綴elseecho "[backup] 開始備份 $SERVER_NAME ..."cp $BASE_PATH/$SERVER_NAME.jar $BASE_PATH/backup/$SERVER_NAME-$DATE.jarecho "[backup] 備份 $SERVER_NAME 完成"fi
}# 最新構(gòu)建代碼 移動(dòng)到項(xiàng)目環(huán)境
function transfer() {echo "[transfer] 開始轉(zhuǎn)移 $SERVER_NAME.jar"# 刪除原 jar 包if [ ! -f "$BASE_PATH/$SERVER_NAME.jar" ]; thenecho "[transfer] $BASE_PATH/$SERVER_NAME.jar 不存在,跳過刪除"elseecho "[transfer] 移除 $BASE_PATH/$SERVER_NAME.jar 完成"rm $BASE_PATH/$SERVER_NAME.jarfi# 復(fù)制新 jar 包echo "[transfer] 從 $SOURCE_PATH 中獲取 $SERVER_NAME.jar 并遷移至 $BASE_PATH ...."cp $SOURCE_PATH/$SERVER_NAME.jar $BASE_PATHecho "[transfer] 轉(zhuǎn)移 $SERVER_NAME.jar 完成"
}# 停止
function stop() {echo "[stop] 開始停止 $BASE_PATH/$SERVER_NAME"PID=$(ps -ef | grep $BASE_PATH/$SERVER_NAME | grep -v "grep" | awk '{print $2}')# 如果 Java 服務(wù)啟動(dòng)中,則進(jìn)行關(guān)閉if [ -n "$PID" ]; then# 正常關(guān)閉echo "[stop] $BASE_PATH/$SERVER_NAME 運(yùn)行中,開始 kill [$PID]"kill -15 $PID# 等待最大 120 秒,直到關(guān)閉完成。for ((i = 0; i < 120; i++))dosleep 1PID=$(ps -ef | grep $BASE_PATH/$SERVER_NAME | grep -v "grep" | awk '{print $2}')if [ -n "$PID" ]; thenecho -e ".\c"elseecho '[stop] 停止 $BASE_PATH/$SERVER_NAME 成功'breakfidone# 如果正常關(guān)閉失敗,那么進(jìn)行強(qiáng)制 kill -9 進(jìn)行關(guān)閉if [ -n "$PID" ]; thenecho "[stop] $BASE_PATH/$SERVER_NAME 失敗,強(qiáng)制 kill -9 $PID"kill -9 $PIDfi# 如果 Java 服務(wù)未啟動(dòng),則無需關(guān)閉elseecho "[stop] $BASE_PATH/$SERVER_NAME 未啟動(dòng),無需停止"fi
}# 啟動(dòng)
function start() {# 開啟啟動(dòng)前,打印啟動(dòng)參數(shù)echo "[start] 開始啟動(dòng) $BASE_PATH/$SERVER_NAME"echo "[start] JAVA_OPS: $JAVA_OPS"echo "[start] JAVA_AGENT: $JAVA_AGENT"echo "[start] PROFILES: $PROFILES_ACTIVE"# 開始啟動(dòng)BUILD_ID=dontKillMe nohup java -server $JAVA_OPS $JAVA_AGENT -jar $BASE_PATH/$SERVER_NAME.jar --spring.profiles.active=$PROFILES_ACTIVE &echo "[start] 啟動(dòng) $BASE_PATH/$SERVER_NAME 完成"
}# 健康檢查
function healthCheck() {# 如果配置健康檢查,則進(jìn)行健康檢查if [ -n "$HEALTH_CHECK_URL" ]; then# 健康檢查最大 60 秒,直到健康檢查通過echo "[healthCheck] 開始通過 $HEALTH_CHECK_URL 地址,進(jìn)行健康檢查";for ((i = 0; i < 60; i++))do# 請(qǐng)求健康檢查地址,只獲取狀態(tài)碼。result=`curl -I -m 10 -o /dev/null -s -w %{http_code} $HEALTH_CHECK_URL || echo "000"`# 如果狀態(tài)碼為 200,則說明健康檢查通過if [ "$result" == "200" ]; thenecho "[healthCheck] 健康檢查通過";break# 如果狀態(tài)碼非 200,則說明未通過。sleep 1 秒后,繼續(xù)重試elseecho -e ".\c"sleep 1fidone# 健康檢查未通過,則異常退出 shell 腳本,不繼續(xù)部署。if [ ! "$result" == "200" ]; thenecho "[healthCheck] 健康檢查不通過,可能部署失敗。查看日志,自行判斷是否啟動(dòng)成功";tail -n 10 nohup.outexit 1;# 健康檢查通過,打印最后 10 行日志,可能部署的人想看下日志。elsetail -n 10 nohup.outfi# 如果未配置健康檢查,則 slepp 60 秒,人工看日志是否部署成功。elseecho "[healthCheck] HEALTH_CHECK_URL 未配置,開始 sleep 60 秒";sleep 60echo "[healthCheck] sleep 60 秒完成,查看日志,自行判斷是否啟動(dòng)成功";tail -n 50 nohup.outfi
}# 部署
function deploy() {cd $BASE_PATH# 備份原 jarbackup# 停止 Java 服務(wù)stop# 部署新 jartransfer# 啟動(dòng) Java 服務(wù)start# 健康檢查healthCheck
}deploy
四、結(jié)論
本地已完成配置及實(shí)現(xiàn)一鍵部署,親測(cè)有效!