上一集我们说到如何从零开始搭建一个Vue-cli 3.0的项目,而这一集我们将说到如何手写一份阉割版的CI脚本。
首先说一下GitLab部署到服务器的操作,一般有两种,一种是规范化分离的,包含runner+ci+gitlab pages。另外一种是高自由度的,只包含runner+ci。
这两种部署方式的区别在于,前者的ci只包含关于打包和文件移动的操作(阉割版),至于部署到哪个服务器,具体怎么部署,一般来说是由项目组的管理员去配置的,开发者只需要把打包后的文件丢到一个名为public的目录,gitlab pages就会将该目录下的所有文件部署到管理员配置好的服务器中,开发者没有配置服务器的权限。而后者是集打包、文件移动、配置docker镜像和服务器域名于一体的,开发者拥有所有权限。
一般来说,比较规范的项目开发都会用前者,做到各端职责分离。
总结一下gitlab关于规范化分离部署的操作流程:开发者提交代码后,runner检索项目根目录下名为.gitlab-ci.yml的文件,并执行文件中的脚本,脚本内容包括项目的运行,打包,缓存打包文件,转移文件到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分支上进行
下载一个工件下来看看:
可以发现我所言非虚。