Gitlab CI CD
基本概念
- CI,Continuous Integration 持续集成, 即在代码构建过程中持续的对代码进行集成、构建、自动化测试。
- CD,Continuous Deployment 持续交付,即在代码构建完毕后,可以方便的进行部署上线,快速迭代交付产品。
Gitlab CI/CD
先看一张图,介绍了 Gitlab CI/CD 的工作流程
上图是一个通用的开发流程,从代码实现开始、提交,通过代码的改变触发 CI/CD pipeline,后续通过 CR 和 Approve,代码才合并进入分支/
更丰富的操作:
CI/CD pipelines
pipelines 包含两个核心的,它是 CI/CD 顶级组件。
- Jobs 定义了要做什么。(eg:compile job or test job)
- Stages 定义了如何做。
如果一个 Stage 中的所有的 Job 都成功,则 pipeline 进入下一个 Stage。 如果一个 Stage 中任何 Job 失败,一般不会到下一个 Stage,并且 pipeline 会提前结束。
典型的一个 pipeline 的操作:
- build stage, 使用一个 job 去 compile 代码
- test stage,使用 多个 job 去跑 ut test
- staing stage,使用 分布部署阶段
- production stage,启动 job 生成部署阶段
Jobs
pipeline 的配置从 job 开始了,job 是 .gitlab-ci.yml 最基本的元素。
选择什么时候执行 job
- rules 满足规则,支持正则
- only 只有
- except 排除
job:
script: echo "Hello, Rules!"
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
when: manual
allow_failure: true
- if: '$CI_PIPELINE_SOURCE == "schedule"'
Variables
Variables 是一种环境变量,可以使用遍历达到控制 Job 和 pipeline 的行为
- .gitlab-co.yml 定义的 variables
- project CI/CD variables
- group 的 CI/CD variables
- instance CI/CD variables.
variables:
TEST_VAR: "All jobs can use this variable's value"
job1:
variables:
TEST_VAR_JOB: "Only job1 can use this variable's value"
script:
- echo "$TEST_VAR" and "$TEST_VAR_JOB"
Caches
Caches 是 Job 之前会进行下载,然后在多个 Stage 下的 Job 都可以使用 Cache 来作为加速操作。
Cache
- 使用 cache 关键字定义每个 Job 的 cache,否则被禁止
- pipeline 的后续可以使用 cache
- 如果依赖相同,同一个 pipeline 后续 job 可以使用 cache
- 不同的 project 不能共享 cache
Artifacts
- 定义每个 job 的 artifact
- 同一个 pipeline 后续的 job 可以使用前一个阶段的 artifact
- 不同的 project 不能共享 artifact
- artifact 默认保存 30 day,可以自定义过期时间
test-job:
stage: build
cache:
- key:
files:
- Gemfile.lock
paths:
- vendor/ruby
- key:
files:
- yarn.lock
paths:
- .yarn-cache/
script:
- bundle install --path=vendor
- yarn install --cache-folder .yarn-cache
- echo Run tests...
禁止缓存
job:
cache: []
继承模式的缓存
cache: &global_cache
key: $CI_COMMIT_REF_SLUG
paths:
- node_modules/
- public/
- vendor/
policy: pull-push
job:
cache:
# inherit all global cache settings
<<: *global_cache
# override the policy
policy: pull
其他的 CI/CD
- GitHub Actions
github actions 文档 https://docs.github.com/cn/actions/quickstart
Ref: