gitlab ci

.gitlab-ci.yml
在git项目的根目录下的一个文件,记录了一系列的阶段和执行规则。GitLab-CI在push后会解析它,根据里面的内容调用runner来运行。



image
image: node # 选用docker镜像
我项目的 CI 任务是选的在 Docker 上运行,所以每次执行 CI 任务的时候,都会新启动一个 Docker 容器。因 为是前端项目,所以需要node环境。所以选用的是node镜像。也可以选择自己的docker镜像。



stages
stages: # Stages 表示构建阶段,这里有两个阶段 install, deploy



  • install

  • deploy
    Stages 表示构建阶段,说白了就是上面提到的流程。 我们可以在一次 Pipeline 中定义多个 Stages,每个Stage可以完成不同的任务。 Stages有下面的特点:



所有 Stages 会按照顺序运行,即当一个 Stage 完成后,下一个 Stage 才会开始
只有当所有 Stages 完成后,该构建任务 (Pipeline) 才会成功



如果任何一个 Stage 失败,那么后面的 Stages 不会执行,该构建任务 (Pipeline) 失败
only
only:



  • master
    只有maser分支才会触发这个脚本,因为我们采用的git-flow工作流,开发人员可能把自己未完善的分支(没有经过上级code review)提交到线上仓库,那么只要有push就会触发部署到线上环境,这样的后果是不堪设想的,所以必须加一个only,只有经过了code review的代码 被merge进入了maser分支才会实现部署到线上环境。



Jobs
install-staging:dep: # Jobs 表示构建工作,表示某个 Stage 里面执行的工作。
stage: install
Jobs 表示构建工作,表示某个 Stage 里面执行的工作。 我们可以在 Stages 里面定义多个 Jobs,这些 Jobs 会有以下特点:



相同 Stage 中的 Jobs 会并行执行
相同 Stage 中的 Jobs 都执行成功时,该 Stage 才会成功



如果任何一个 Job 失败,那么该 Stage 失败,即该构建任务 (Pipeline) 失败
script
script:
- echo “=====start install======”
- npm install –registry=https://registry.npm.taobao.org
- echo “=====end install======”
script是一段由Runner执行的shell脚本



artifact
artifacts: # 将这个job生成的依赖传递给下一个job。需要设置dependencies
expire_in: 60 mins # artifacets 的过期时间,因为这些数据都是直接保存在 Gitlab 机器上的,过于久远的资源就可以删除掉了
paths:
- node_modules/
artifacts 被用于在job作业成功后将制定列表里的文件或文件夹附加到job上,传递给下一个job,如果要在两个job之间传递artifacts,你必须设置dependencies



脚本总结
总结: 这个脚本的作用是 将merge进入master分支的代码打包并部署到阿里云的oss上。这里最值得注意的就是artifact,因为定义了两个job,其实每个job都是用的新的镜像,所以这样就会导致install阶段与deploy阶段没有任何关系,但是实际上deploy阶段是依赖install阶段安装的node_module的。所以必须将install阶段安装的 node_modules传递给下一个job(deploy),这就需要用到artifact或者cache了(这里我用的是artifact)。ps:我还其实还把这两个job整合成一个了,但是不知道为什么明明两个分开执行就只要10min,而合在一个job就要超过1h,最后导致超时Pipeline失败。



https://segmentfault.com/a/1190000021092024



https://segmentfault.com/a/1190000020622168



https://zhuanlan.zhihu.com/p/184936276
https://developer.aliyun.com/article/754508



以前的老技术,比如git/svn+jenkins这种,jenkins的配置多数还是依赖于负责维护CI的人,很多人不熟悉jenkins怎么配置,每一个步骤应该怎么编译和测试,一般都由CI的人来定义。



Gitlab 内置了 CICD 工具,不需要使用第三方工具。使用gitlab的CICD流程,使用物联管理平台项目为例子。搭建一个pipe。一旦提交代码,自动将物联管理平台部署到docker(k8s集群)中。



https://developer.aliyun.com/article/754508



https://www.yuque.com/mty/here/zcmesl
https://developer.aliyun.com/article/754508
https://www.jianshu.com/p/df433633816b
https://www.jianshu.com/p/ee9aba1bf73a
https://www.w3cschool.cn/cloudbasehosting/cloudbasehosting-dfvl38bn.html



Category web