上次给CI环境搭建好了,这次写了一个脚本用于服务端打包及部署使用,解决了前端需要频繁打包的问题,即时将代码推到工程库,服务端自动打包作发布,然后测试人员即时测试,尽早发现问题。

发布原理:

我没有通过软链的方式作发布,因为目前在Dev和Test环境也不需要用到回滚的地方,就是直接将打包好的文件解压到指定的目录下面。

主要流程如下:

  1. gitlab-runner中.gitlab-ci.yml配置通过不同的分支,触发不同的构建脚本

  2. 构建脚本拉取最新代码,然后安装依赖及打不同环境的包

  3. 将打好的包,通过scp传递到Dev/Test所在的服务器

  4. 通过ssh触发Dev / Test的发布脚本,主要是将压缩包解压到网站目录。

  5. 作清理工作

主要用到的脚本

.gitlab-ci.yml

  1. stages:
  2. - deploy-dev
  3. - deploy-test
  4. deploy_develop:
  5. stage: deploy-dev
  6. tags:
  7. - nodejs
  8. - php
  9. script:
  10. - /data/scripts/ci/web_deploy_dev.sh
  11. only:
  12. - dev
  13. deploy_test:
  14. stage: deploy-test
  15. tags:
  16. - nodejs
  17. - php
  18. script:
  19. - /data/scripts/ci/web_deploy_test.sh
  20. only:
  21. - release

安装依赖及打包,传送文件,web_deploy_dev.sh

  1. ##
  2. #前端工程自动化构建
  3. #dev环境
  4. ##
  5. node_path=/data/scripts/node/bin/node
  6. npm_path=/data/scripts/node/bin/npm
  7. product=web_cloudTax_manage_dev #不能重复
  8. web_path=/tmp/$product
  9. target_path="${web_path}/dist"
  10. git_path=git@172.1.1.22:WEB-Developer/cloud_manage.git
  11. function display(){
  12. if [ $? -ne 0 ]
  13. then
  14. exit -999
  15. fi
  16. }
  17. if [ ! -d $web_path ]
  18. then
  19. echo "创建文件夹${web_path}"
  20. sudo mkdir -p $web_path
  21. echo "进入项目路径:${web_path}"
  22. cd $web_path
  23. sudo git clone $git_path .
  24. display
  25. else
  26. echo "进入项目路径:${web_path}"
  27. cd $web_path
  28. display
  29. fi
  30. sudo chown -R gitlab-runner:gitlab-runner $web_path
  31. if [ -d $target_path ]
  32. then
  33. sudo chown -R gitlab-runner:gitlab-runner $target_path
  34. fi
  35. display
  36. sudo git checkout test-dev
  37. sudo git pull
  38. display
  39. #echo "进入项目路径:${web_path}"
  40. #cd $web_path
  41. echo "清除原先的dist打包文件夹"
  42. sudo rm -rf $target_path
  43. display
  44. echo "安装依赖"
  45. node_depency="${npm_path} i"
  46. $node_depency
  47. display
  48. echo "开始打包"
  49. build="${npm_path} run build:dev"
  50. $build
  51. display
  52. if [ ! -d "$target_path" ]
  53. then
  54. echo "打包失败,dist未生成"
  55. exit 1
  56. fi
  57. echo "进入打包目录${target_path}"
  58. cd ${target_path}
  59. echo "开始创建压缩包/tmp/${product}.tar.gz"
  60. sudo tar cvzf "/tmp/${product}.tar.gz" .
  61. display
  62. echo "======================================"
  63. echo "开始复制文件到部署服务器"
  64. scp /tmp/${product}.tar.gz lc@172.11.10.68:/tmp
  65. echo "文件复制完成到部署服务器"
  66. display
  67. echo "开始服务器部署"
  68. ssh lc@172.11.10.68 /data/scripts/ci/web_deploy.sh $product.tar.gz
  69. display
  70. echo "清除原始压缩包"
  71. sudo rm -rf "/tmp/${product}.tar.gz"
  72. display
  73. exit 0

发布脚本web_deploy.sh

  1. #! /bin/sh
  2. ##
  3. #将从gitlab-runner打包好的文件,拷贝到网站目录中作发布
  4. ##
  5. webpath=/data/vhosts/vhosts.website/test_manage.zc.com
  6. tar_file=$1
  7. tar_path="/tmp/${tar_file}"
  8. if [ ! -f "$tar_path" ]
  9. then
  10. echo "打包文件${tar_path}不存在,无法作发布处理"
  11. exit
  12. fi
  13. echo "开始拷贝文件,从${tar_path}到${webpath}"
  14. cp $tar_path $webpath
  15. echo "复制完成"
  16. echo "进入网站目录"
  17. cd $webpath
  18. if [ ! -f "${webpath}/${tar_file}" ]
  19. then
  20. echo "解压包${webpath}/${tar_file}不存在,无法发布"
  21. exit
  22. fi
  23. echo "删除原来的"
  24. #rm -rf ${webpath}
  25. echo "解压"
  26. tar xzf "${webpath}/${tar_file}" --overwrite .
  27. echo "部署完成,执行清理操作"
  28. chown -R nginx:nginx $webpath
  29. rm "${webpath}/${tar_file}"

好了,通过上面的脚本就能快速构建前端的Vue工程了,不过由于时间关系,上面的脚本好多异常性没有作太多处理,这个在后续的使用中继续完善,目前是保证能基本可用。让测试人员用起来就行。

vue服务端打包及自动部署的更多相关文章

  1. [vue] vue服务端渲染nuxt.js

    初始化 使用脚手架工具 create-nuxt-app 快速创建 npx create-nuxt-app <项目名> npx create-nuxt-app 执行一些选择 在集成的服务器端 ...

  2. vue服务端渲染简单入门实例

    想到要学习vue-ssr的同学,自不必多说,一定是熟悉了vue,并且多多少少做过几个项目.然后学习vue服务端渲染无非解决首屏渲染的白屏问题以及SEO友好. 话不多说,笔者也是研究多日才搞明白这个服务 ...

  3. 解析Nuxt.js Vue服务端渲染摸索

    本篇文章主要介绍了详解Nuxt.js Vue服务端渲染摸索,写的十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下.如有不足之处,欢迎批评指正. Nuxt.js 十分简单易用.一个简单 ...

  4. Egg + Vue 服务端渲染工程化实现

    在实现 egg + vue 服务端渲染工程化实现之前,我们先来看看前面两篇关于Webpack构建和Egg的文章: 在 Webpack工程化解决方案easywebpack 文章中我们提到了基于 Vue ...

  5. vue服务端渲染提取css

    vue服务端渲染,提取css单独打包的好处就不说了,在这里主要说的是抽取css的方法 要从 *.vue 文件中提取 CSS,可以使用 vue-loader 的 extractCSS 选项(需要 vue ...

  6. vue服务端渲染之nuxtjs

    前言 本篇主要针对nuxtjs中的一些重要概念整理和代码实现! 在学习vue服务端渲染之前,先搞清楚几个概念: 什么是客户端渲染(CSR) 什么是服务端渲染(SSR) CSR和SSR有什么异同 客户端 ...

  7. vue服务端渲染axios预取数据

    首先是要参考vue服务端渲染教程:https://ssr.vuejs.org/zh/data.html. 本文主要代码均参考教程得来.基本原理如下,拷贝的原文教程. 为了解决这个问题,获取的数据需要位 ...

  8. Nuxt.js vue服务端渲染

    一.为什么要用Nuxt.js 原因其实不用多说,就是利用Nuxt.js的服务端渲染能力来解决Vue项目的SEO问题. 二.Nuxt.js和纯Vue项目的简单对比 1. build后目标产物不同 vue ...

  9. Vue 服务端渲染(SSR)

    什么是服务端渲染? 简单理解是将组件或页面通过服务器生成html字符串,再发送到浏览器,最后将静态标记"混合"为客户端上完全交互的应用程序. 服务端渲染的优点 更好的SEO,搜索引 ...

随机推荐

  1. 易优CMS:关于assign你知道多少

    [基础用法] 名称:assign 功能:模板文件中定义变量,可在其他标签里使用该变量 语法: {eyou:assign name='typeid' value='5' /} 文件: 无 参数: nam ...

  2. 如何编写 maptalks plugin

    前面写过 maptalks plugin ( ArcGISTileLayer ),有读者留言说文章写得太精简,根据文章给出的核心代码没办法写出一个完整的 plugin ( 文中有完整 demo 地址, ...

  3. 021.Docker mysql启动时执行初始化sql

    1.拉取Mysql镜像 # docker pull mysql:5.7 2.检查mysql镜像 # docker inspect mysql:5.7 ## "Entrypoint" ...

  4. [b0005] Linux 系统常用操作命令

    1 Ubuntu 解压 hadoop@ssmaster:~$ -bin-hadoop2..tgz 联网安装程序包 sudo apt-get install php

  5. Linux—编译安装详解

    编译安装python3 1.python是通过C语言编写,所以在编译安装python3时需要在C语言环境 [root@localhost ~]# yum install -y gcc 2.python ...

  6. js 判断当前时间是否处于某个一个时间段内

    js 判断当前时间(或者所选时间)是否在某一时间段 我们可以使用 jutils - JavaScript常用函数库的 isDuringDate 函数来实现 传入 beginDateStr (开始时间) ...

  7. ssh-copy-id 命令自动复制本机公钥到远程机器

    ssh-copy-id 将本机的公钥复制到远程机器的authorized_keys文件中,ssh-copy-id能让你有到远程机器的home, ~./ssh , 和 ~/.ssh/authorized ...

  8. toast文本提示信息元素获取

    在做自动化的过程中,我们有可能会遇到toast提示语,这种提示语只会显示一两秒的样子,导致我们获取元素很困难 今天总结下怎么获取这个toast元素吧 例如下图所示的这种toast提示 图中红框的这种元 ...

  9. SpringCloud学习笔记(五、SpringCloud Netflix Hystrix)

    目录: Hystrix简介 线程隔离:线程池.信号量 服务降级.服务熔断.请求缓存.请求合并 Hystrix完整流程.Hystrix属性值 注解方式实现Hystrix Hystrix Dashboar ...

  10. [C3W2] Structuring Machine Learning Projects - ML Strategy 2

    第二周:机器学习策略(2)(ML Strategy(2)) 误差分析(Carrying out error analysis) 你好,欢迎回来,如果你希望让学习算法能够胜任人类能做的任务,但你的学习算 ...