.gitlab-ci.yml
在git项目的根目录下的一个文件,记录了一系列的阶段和执行规则。GitLab-CI在push后会解析它,根据里面的内容调用runner来运行。
image
image: node # 选用docker镜像
我项目的 CI 任务是选的在 Docker 上运行,所以每次执行 CI 任务的时候,都会新启动一个 Docker 容器。因 为是前端项目,所以需要node环境。所以选用的是node镜像。也可以选择自己的docker镜像。
stages
stages: # Stages 表示构建阶段,这里有两个阶段 install, deploy
所有 Stages 会按照顺序运行,即当一个 Stage 完成后,下一个 Stage 才会开始
只有当所有 Stages 完成后,该构建任务 (Pipeline) 才会成功
如果任何一个 Stage 失败,那么后面的 Stages 不会执行,该构建任务 (Pipeline) 失败
only
only:
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