美文网首页
VUE编译部署

VUE编译部署

作者: 爱读书的夏夏 | 来源:发表于2020-02-25 14:50 被阅读0次

第一次设置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

相关文章

网友评论

      本文标题:VUE编译部署

      本文链接:https://www.haomeiwen.com/subject/uhhtchtx.html