Gitlab CI CD

基本概念

  • CI,Continuous Integration 持续集成, 即在代码构建过程中持续的对代码进行集成、构建、自动化测试。
  • CD,Continuous Deployment 持续交付,即在代码构建完毕后,可以方便的进行部署上线,快速迭代交付产品。

Gitlab CI/CD

先看一张图,介绍了 Gitlab CI/CD 的工作流程

gitlab-cicd-workflow

上图是一个通用的开发流程,从代码实现开始、提交,通过代码的改变触发 CI/CD pipeline,后续通过 CR 和 Approve,代码才合并进入分支/

更丰富的操作:

gitlab-cicd-workflow

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:

comments powered by Disqus