前言
隨著Docker、K8S、服務網格(ServiceMesh)等新型部署管理方式的興起,Jenkins等工具已逐漸是CI/CD的較為過時的管理方式,但是對於中小型開發團隊且系統部署規模及硬體資源都相對較小的情況下,為了減輕開發運維過程中頻繁的版本迭代及多模組多伺服器部署帶來的負擔,提高生產運維效率,減少因人為過失導致的線上生產事故,選擇Jenkins來搭配程式碼管理工具GitLab及專案管理工具禪道、Jira等作為自動化構建部署管理方式,也不失為一個過渡性又相對合理的折中選擇。
基於以上的想法和前提,針對於正在開發階段的專案以及當下需求,我選擇了搭建Jenkins作為暫時的構建部署工具,在搭建設定過程中遇到了一些坑,花了一些時間得以排查解決,現將詳細的構建設定記錄下來。
一、Jenkins安裝及所需外掛安裝
安裝過程略。
我這用到工具包括JDK、Git、Maven、NodeJS:可以選擇自行在伺服器安裝,也可以通過Jenkins自動安裝,位置在系統管理 》全域性工具設定
安裝的外掛包括 NodeJS Plugin、Publish Over SSH:通過 系統管理 》外掛管理 線上搜尋安裝,無需重啟。
二、微服務後端模組設定
1、新建任務
填入任務名稱,選擇構建一個maven專案,如果沒有該選項可能是外掛沒有安裝導致,也可以選擇構建一個自由 風格得軟體專案
2、構建打包
clean package -pl carbon-modules/carbon-file -am -Dmaven.test.skip=true
3、遠端部署
部署方式可以根據實際情況靈活調整:如果Jenkins和系統部署為一臺伺服器,則無需遠端傳輸,將打包好的檔案移動或複製到指定的目錄執行即可;
如果不是同一臺伺服器,則一般需要將打包好的資原始檔傳輸到目標伺服器並通過命令啟動執行。
下面截圖展示遠端部署的方式,基本適用於大多數場景。
設定SSH伺服器:系統管理 》系統設定
source /etc/profile
BUILD_ID=DONTKILLME
cd /opt/carbon/backend/command
sh carbon-modules-file.sh restart 9302
carbon-modules-file.sh
#!/bin/bash
#設定jar名稱
APP_NAME=carbon-modules-file
SPACE=xxxxx
PORT="$2"
#使用說明,用來提示輸入引數
usage() {
echo "Usage: sh 指令碼名.sh [start|stop|restart|status]"
exit 1
}
#檢查程式是否在執行
is_exist(){
pid=`ps -ef|grep $APP_NAME.jar|grep -v 'grep'|awk '{print $2}' `
#如果不存在返回1,存在返回0
if [ -z "${pid}" ]; then
return 1
else
return 0
fi
}
#啟動方法
start(){
is_exist
if [ $? -eq "0" ]; then
echo "${APP_NAME} is already running, pid=${pid} ."
elif [ ${PORT} ]; then
echo "port is ${PORT}"
nohup java -Dserver.port=${PORT} -Xms512m -Xmx512m -jar ../${APP_NAME}.jar --spring.profiles.active=prod --spring.cloud.nacos.discovery.namespace=${SPACE} --spring.cloud.nacos.config.namespace=${SPACE} > ../logs/${APP_NAME}.log &
echo "${APP_NAME} start success"
else
nohup java -Xms512m -Xmx512m -jar ../${APP_NAME}.jar --spring.profiles.active=prod --spring.cloud.nacos.discovery.namespace=${SPACE} --spring.cloud.nacos.config.namespace=${SPACE} > ../logs/${APP_NAME}.log &
echo "${APP_NAME} start success"
fi
}
#停止方法
stop(){
is_exist
if [ $? -eq "0" ]; then
kill -9 $pid
else
echo "${APP_NAME} is not running"
fi
}
#輸出執行狀態
status(){
is_exist
if [ $? -eq "0" ]; then
echo "${APP_NAME} is running, Pid is ${pid}"
else
echo "${APP_NAME} is NOT running."
fi
}
#重啟
restart(){
stop
start
}
#根據輸入引數,選擇執行對應方法,不輸入則執行使用說明
case "$1" in
"start")
start
;;
"stop")
stop
;;
"status")
status
;;
"restart")
restart
;;
*)
usage
;;
esac
注:由於使用了nacos作為了註冊設定中心,命令中增加了相關設定,可自行根據專案情況修改;
命令檔案中換行符一定確定是Unix(LF)格式;
將sh檔案上傳到伺服器目錄後,增加可執行許可權(chmod u+x *.sh)。
4、複製構建
三、系統前端(Vue)設定
原始碼管理等略,參考後端設定。
cd /data/iot/tomcat_jenkins/data/workspace/carbon-ui/carbon-ui
node -v
npm -v
npm install
npm run build:prod
cd dist
rm -rf carbon-ui.tar.gz
tar -zcvf carbon-ui.tar.gz *
cd /data/carbon/front/
tar -xzvf carbon-ui.tar.gz -C /data/carbon/front/
find /data/carbon/front/ -name "*.tar.gz" -exec rm -rf {} \;
echo '釋出成功!'
構建完成後檢視紀錄檔,輸出以下內容即為成功