上一集我们说到如何从零开始搭建一个 vue-cli 3.0 的项目, 而这一集我们将说到如何手写一份阉割版的 CI 脚本.
首先说一下 GitLab 部署到服务器的操作, 一般有两种, 一种是规范化分离的, 包含 runner+ci+GitLab pages. 另外一种是高自由度的, 只包含 runner+ci.
这两种部署方式的区别在于, 前者的 ci 只包含关于打包和文件移动的操作 (阉割版), 至于部署到哪个服务器, 具体怎么部署, 一般来说是由项目组的管理员去配置的, 开发者只需要把打包后的文件丢到一个名为 public 的目录, GitLab pages 就会将该目录下的所有文件部署到管理员配置好的服务器中, 开发者没有配置服务器的权限. 而后者是集打包, 文件移动, 配置 docker 镜像和服务器域名于一体的, 开发者拥有所有权限.
一般来说, 比较规范的项目开发都会用前者, 做到各端职责分离.
总结一下 GitLab 关于规范化分离部署的操作流程: 开发者提交代码后, runner 检索项目根目录下名为. GitLab-ci.YAML 的文件, 并执行文件中的脚本, 脚本内容包括项目的运行, 打包, 缓存打包文件, 转移文件到 public 目录以供 GitLab pages 使用. 而 GitLab pages 会到 public 目录中拿到所有打包文件并传到服务器中.
好, 现在就来看一下我写的一份 ci 脚本, 首先说一下, ci 的代码风格类似于 python 这种, 纯靠缩进来区分层级关系的, 所以书写时, 缩进是严格的.
下面是代码注释版版的:
- build site: // 自己随便命名的
- image: node:latest //node 镜像为最新版的, 最好指定版本号
- stage: build // 当前 stage 阶段为 build
- script: //build 阶段运行的脚本
- - NPM install --progress=false --no-optional // 根据 package.JSON 来安装依赖 progress 设为 false 是为了不打印安装的具体进度, no optional 是为了跳过 NPM 推荐的但不是编译必须的, 也没有写在 package.JSON 里一些依赖, 比如说查看源代码等
- - NPM run build // 打包
- artifacts: // 工件, 可以缓存在 GitLab 的流水线记录中, 供直接下载
- expire_in: 3 days // 工件缓存的有效时间
- paths: // 路径
- - dist // 工件指向的目录, 这里指整个 dist 目录
- cache: // 缓存
- paths: // 路径
- - node_modules/ // 缓存 node_mudules 将大大提高 ci 运行的速度
- create pages: // 随便起的名字
- stage: deploy // 当前阶段为 deploy
- script: //deploy 阶段运行的命令
- - rm -rf public //Linux 命令, 递归无询问删除 public 目录下所有文件
- - mkdir public // 新建文件夹 public
- - mv dist/* public // 将 dist 目录下的所有文件都移动到 public 目录下
- artifacts: // 工件缓存
- expire_in: 3 days // 时效为 3 天
- paths: // 路径
- - public // 缓存整个 public 目录的文件
- only:
- - dev //ceate pages 下的所有操作只在 dev 分支上进行
下载一个工件下来看看:
可以发现我所言非虚.
来源: https://www.cnblogs.com/zhangnan35/p/10709252.html