第一次设置VUE的编译和部署配置,有很多不明白的地方。先在这里进行记录,后续再详细学习。
使用的编译和部署平台,是公司对Jenkins二次开发的一个平台。说起这个Jenkins,其实对它的整个运行过程,并不是很清楚,这也是公司基建完善对开发和测试的一个不利的地方。就像自动化越完善,一般会导致测试人员的业务能力降低一个道理。
VUE的工程是跟后端分离的一个纯前端工程。它是运行在node.js的工程。刚才学习了下node.js是什么,还真是吓一跳。原来node.js跟js的关系就像jvm跟java的关系样,是js的运行时环境。有了node.js,以前只能在浏览器中运行的js语言,现在也可以在服务器上运行了,打开了前端人员走向后端的道路。
我们公司已经有基于node.js的一些工程,我只要参考这些工程的设置,应该就可以完成工程的编译和部署。
废话不多说了。
1.需要配置自定义的编译命令:
npm run gulp $deploy_type
2.启服务的脚本:
#! /bin/bash
set -eu
PROJECT_NAME="h_xxxxx"
ROOT_PATH="/home/q/www"
PID_PATH="${ROOT_PATH}/pids"
LOG_PATH="${ROOT_PATH}/logs"
APP_PATH="${ROOT_PATH}/${PROJECT_NAME}"
APP_WEBAPPS_PATH="${APP_PATH}/webapps"
APP_LOG_PATH="${APP_PATH}/logs"
APP_WWW_LOG_PATH="${LOG_PATH}/${PROJECT_NAME}"
if [ ! -d $PID_PATH ];then
mkdir $PID_PATH
fi
if [ ! -d $LOG_PATH ];then
mkdir $LOG_PATH
fi
if [ ! -d $APP_LOG_PATH ];then
mkdir $APP_LOG_PATH
fi
if [ ! -d $APP_WWW_LOG_PATH ];then
mkdir $APP_WWW_LOG_PATH
fi
cd $APP_WEBAPPS_PATH
echo 'start server and sleep 5s'
pm2 start "${APP_WEBAPPS_PATH}/pm2.config.js" >> "${APP_WWW_LOG_PATH}/pm2.log"
sleep 5s
# 自动添加gzip日志文件的crontab
# 设置了set -e,执行命令返回非0时会直接退出
# 这里需要依赖 grep -q的返回值,所以需要先关闭 set e 选项
GZIP_LOG_FILE="${APP_WEBAPPS_PATH}/gzip_rm_log.sh"
CRONTAB_FILE="/var/spool/cron/root"
GZIP_LOG_CRONTAB="7 * * * * sh ${GZIP_LOG_FILE} 1>/dev/nul"
set +e
sudo grep -q $GZIP_LOG_FILE $CRONTAB_FILE
if [[ $? -ne 0 && -f "${GZIP_LOG_FILE}" ]]; then
echo "add root crontab: ${GZIP_LOG_CRONTAB} "
sudo sed -i "\$a${GZIP_LOG_CRONTAB}" $CRONTAB_FILE
fi
set -e
echo 'start server done'
3.停服务的脚本:
#! /bin/bash
set -eu
PROJECT_NAME="h_xxxxxxx"
ROOT_PATH="/home/q/www"
PID_PATH="${ROOT_PATH}/pids"
LOG_PATH="${ROOT_PATH}/logs"
APP_PATH="${ROOT_PATH}/${PROJECT_NAME}"
APP_WEBAPPS_PATH="${APP_PATH}/webapps"
APP_LOG_PATH="${APP_PATH}/logs"
APP_WWW_LOG_PATH="${LOG_PATH}/${PROJECT_NAME}"
cd $APP_WEBAPPS_PATH
echo "stop server and sleep 5s"
pm2 delete "${APP_WEBAPPS_PATH}/pm2.config.js" >> "${APP_WWW_LOG_PATH}/pm2.log"
sleep 5s
echo 'stop server done'
node服务的覆盖率收集的脚本:
覆盖率预处理:
#! /bin/bash
set -eu
PROJECT_NAME="h_xxxxx"
# 覆盖率测试服务增加启动参数
if [[ $deploy_type = "beta" && $coverage = "True" ]]; then
echo "对目录 $deploy_dst 下的 dist 进行插桩"
(
cd $deploy_dst
npx qnc instrument dist
)
fi
启动覆盖率收集:
#! /bin/bash
set -eu
PROJECT_NAME="h_xxxxx"
ROOT_PATH="/home/q/www"
PID_PATH="${ROOT_PATH}/pids"
LOG_PATH="${ROOT_PATH}/logs"
APP_PATH="${ROOT_PATH}/${PROJECT_NAME}"
APP_WEBAPPS_PATH="${APP_PATH}/webapps"
APP_LOG_PATH="${APP_PATH}/logs"
APP_WWW_LOG_PATH="${LOG_PATH}/${PROJECT_NAME}"
if [ ! -d $PID_PATH ];then
mkdir $PID_PATH
fi
if [ ! -d $LOG_PATH ];then
mkdir $LOG_PATH
fi
if [ ! -d $APP_LOG_PATH ];then
mkdir $APP_LOG_PATH
fi
if [ ! -d $APP_WWW_LOG_PATH ];then
mkdir $APP_WWW_LOG_PATH
fi
cd $APP_WEBAPPS_PATH
echo 'start server and sleep 5s'
pm2 start "${APP_WEBAPPS_PATH}/pm2.coverage.config.js" >> "${APP_WWW_LOG_PATH}/pm2.log"
sleep 5s
# 自动添加gzip日志文件的crontab
# 设置了set -e,执行命令返回非0时会直接退出
# 这里需要依赖 grep -q的返回值,所以需要先关闭 set e 选项
GZIP_LOG_FILE="${APP_WEBAPPS_PATH}/gzip_rm_log.sh"
CRONTAB_FILE="/var/spool/cron/root"
GZIP_LOG_CRONTAB="7 * * * * sh ${GZIP_LOG_FILE} 1>/dev/nul"
set +e
sudo grep -q $GZIP_LOG_FILE $CRONTAB_FILE
if [[ $? -ne 0 && -f "${GZIP_LOG_FILE}" ]]; then
echo "add root crontab: ${GZIP_LOG_CRONTAB} "
sudo sed -i "\$a${GZIP_LOG_CRONTAB}" $CRONTAB_FILE
fi
set -e
echo 'start server done'
发送覆盖率收集数据到覆盖率平台:
#! /bin/bash -x
CoverServerLogFile=coverage-server.log
CoverServerPort=8987
CoverServer="http://$HOSTNAME.xxxx.com:$CoverServerPort"
# 除deploy_typ=prod 之外其它环境都允许
if [[ $deploy_type = "beta" && $coverage = "True" ]]
then
echo "deploy_type=$deploy_type AND coverage=$coverage ,spawn coverage server "
kill `ps -ef | grep 'qnc pm2-coverage-server' | grep -v grep | head | awk '{print $2}'` > /dev/null 2>&1 && echo "先停止存在的覆盖率服务。"
(
cd $deploy_dst
nohup npx qnc pm2-coverage-server -p $CoverServerPort 1>$CoverServerLogFile 2>&1 &
)
# 5s后check覆盖率服务的url
sleep 5s
echo "check_url ---> $CoverServer/summary"
if [[ "`curl -Is $CoverServer/summary | head -1`" =~ "HTTP/1.1 200 OK" ]]
then
echo "覆盖率服务启动成功^_^,点击访问 $CoverServer"
# 发送覆盖率数据给平台
# CovPlatURL=http://xxxxxxxxxx.do # Beta地址
CovPlatURL=http://xxxxxx.do
# 参数如下
: '
gitUrl git地址 最好必填 主要用于页面查询使用
appCode 工程AppCode 最好必填 主要用于页面查询使用
outPutTag 输出的btag 必填 跟machineIp组合作为唯一键
machineIp 被测服务机器IP 必填 跟outPutTag组合作为唯一键
reportUrl 获取报告的url 必填
reportJsonUrl 获取json元数据的url 必填
'
while IFS='=' read k v
do
v=${v//<br>/}
case $k in
'src_root')
gitUrl=$v
;;
'app_code')
appCode=$v
;;
'portal_output')
outPutTag=$v
;;
esac
done < $deploy_dst/CM_ReleaseInfo.html
curl -H "Content-Type: application/json" -d "{
\"gitUrl\":\"$gitUrl\",
\"appCode\":\"$appCode\",
\"outPutTag\":\"$outPutTag\",
\"machineIp\":\"$(host $HOSTNAME | awk '{print $NF}')\",
\"reportUrl\":\"$CoverServer/report-package\",
\"reportJsonUrl\":\"$CoverServer/summary\"
}" $CovPlatURL
if [[ $? -eq 0 ]]; then echo "发送覆盖率平台数据ok"; fi
else
echo "覆盖率服务启动失败-_-!,详见$deploy_dst/$CoverServerLogFile"
fi
fi
网友评论