本文基于以下配置文件内容进行解读
# 定义job运行什么docker镜像中
# 这里全局指定job运行在node环境中
# 可以在具体的job中再次通过该字段指定以重写job的运行的环境
# node为镜像的名称,可以包含路径。:后面的为tag,node=node:latest,node@xx,@后面的为digest内容可寻址标识符
# 比如node:12.18.4-alpine@sha256:757574c5a2102627de54971a0083d4ecd24eb48fdf06b234d063f19f7bbc22fb,内容可寻址标识符,是根据镜像内容产生的一个ID,只要用于产生这个image的输入不变,那么digest就是可以预测的,换句话说只要镜像的内容不变digest也不会变
image: node:12-slim
# 默认构建阶段为.pre,build,test,deploy,.post
# 自定义了以下构建阶段build,pages
stages:
- build
- pages
# 定义缓存的文件或者文件夹,可以在不同的job之间进行共享
# 这里build job构建文件会生成docs-dist文件夹,定义缓存路径docs-dist,则在pages job里面可以对docs-dist进行移动
cache:
paths:
- docs-dist/
# job的通用配置项
# &用来建立锚点(defaults),<<表示合并到当前数据,*用来引用锚点(yaml语法)
.job_common_config: &job_common_config
# 包含pages-share tag的job runner才能运行job
tags:
- pages-share
# 分支为dev时添加job到pipeline
only:
refs:
- dev
# 在commit信息里面包含如下内容时不添加job到pipeline
except:
variables:
# 内置的环境变量可查看:https://docs.gitlab.com/ee/ci/variables/predefined_variables.html#predefined-variables-reference
# 表达式比较规则可查看:https://docs.gitlab.com/ee/ci/jobs/job_control.html#cicd-variable-expressions
# 搜索匹配正则表达式 包含'feat: initial commit'
- $CI_COMMIT_MESSAGE =~ /feat:\sinitial\scommit/
# 定义job build,在build阶段执行,用于执行构建文档命令
build:
# <<表示合并到当前数据(yaml语法)
# *用来引用锚点(yaml语法)
# 合并job_common_config对象到这里
<<: *job_common_config
stage: build
script:
- yarn config set registry http://npmreg.gzdevops.tsintergy.com/
- yarn config set unsafe-perm true
- yarn install --non-interactive
- yarn docs:build
# 定义job pages,在pages阶段执行,用于部署文档
pages:
<<: *job_common_config
stage: pages
script:
- pwd
- ls
- rm -rf public
- mv docs-dist public
- ls public
# 指定public文件夹里面的内容为artifacts,附加于job,可以被下载,或者是被后续的job下载使用
artifacts:
paths:
- public
only:
- dev