{{< details >}}

  1. Tier: 基础版, 专业版, 旗舰版
  2. Offering: JihuLab.com, 私有化部署

{{< /details >}}

如果您目前正在使用 CircleCI,可以将您的 CI/CD 流水线迁移到 极狐GitLab CI/CD,开始利用其所有强大的功能。

我们收集了一些您在开始迁移之前可能会发现有用的资源。

快速入门指南 是了解极狐GitLab CI/CD 工作原理的一个好概述。您可能还会对 Auto DevOps 感兴趣,它可以用于构建、测试和部署您的应用程序,几乎不需要配置。

对于高级 CI/CD 团队,自定义项目模板 可以实现流水线配置的重用。

如果您有在此未解答的问题,极狐GitLab 社区论坛 可以是一个很好的资源。

config.yml vs .gitlab-ci.yml

CircleCI 的 config.yml 配置文件定义了脚本、作业和工作流(在极狐GitLab 中称为 “阶段”)。在极狐GitLab 中,类似的方法是使用存储库根目录中的 .gitlab-ci.yml 文件。

作业

在 CircleCI 中,作业是一组用于执行特定任务的步骤。在极狐GitLab 中,作业 也是配置文件中的基本元素。在极狐GitLab CI/CD 中不需要 checkout 关键字,因为存储库会自动获取。

CircleCI 作业定义示例:

jobs:
  job1:
    steps:
      - checkout
      - run: "execute-script-for-job1"

极狐GitLab CI/CD 中相同作业定义的示例:

job1:
  script: "execute-script-for-job1"

Docker 镜像定义

CircleCI 在作业级别定义镜像,极狐GitLab CI/CD 也支持。此外,极狐GitLab CI/CD 支持全局设置镜像,以供未定义 image 的所有作业使用。

CircleCI 镜像定义示例:

jobs:
  job1:
    docker:
      - image: ruby:2.6

极狐GitLab CI/CD 中相同镜像定义的示例:

job1:
  image: ruby:2.6

工作流

CircleCI 使用 workflows 来确定作业的运行顺序,这也用于确定并发、顺序、计划或手动运行。在极狐GitLab CI/CD 中,等效功能称为 stages。同一阶段的作业并行运行,并且仅在之前的阶段完成后运行。默认情况下,当作业失败时会跳过下一阶段的执行,但即使作业失败后也可以允许继续。

请参阅 流水线架构概述,以获取有关您可以使用的不同类型流水线的指导。流水线可以根据您的需求进行定制,例如用于大型复杂项目或具有独立定义组件的单体存储库。

并行和顺序作业执行

以下示例显示了作业如何并行或顺序运行:

  1. job1job2 并行运行(在极狐GitLab CI/CD 的 build 阶段)。
  2. job3 仅在 job1job2 成功完成后运行(在 test 阶段)。
  3. job4 仅在 job3 成功完成后运行(在 deploy 阶段)。

CircleCI 使用 workflows 的示例:

version: 2
jobs:
  job1:
    steps:
      - checkout
      - run: make build dependencies
  job2:
    steps:
      - run: make build artifacts
  job3:
    steps:
      - run: make test
  job4:
    steps:
      - run: make deploy

workflows:
  version: 2
  jobs:
    - job1
    - job2
    - job3:
        requires:
          - job1
          - job2
    - job4:
        requires:
          - job3

极狐GitLab CI/CD 中作为 stages 的相同工作流示例:

stages:
  - build
  - test
  - deploy

job1:
  stage: build
  script: make build dependencies

job2:
  stage: build
  script: make build artifacts

job3:
  stage: test
  script: make test

job4:
  stage: deploy
  script: make deploy
  environment: production

定时运行

极狐GitLab CI/CD 提供了一个易于使用的 UI 来计划流水线。此外,规则 可用于确定作业是否应包含或排除在计划的流水线中。

CircleCI 定时工作流示例:

commit-workflow:
  jobs:
    - build
scheduled-workflow:
  triggers:
    - schedule:
        cron: "0 1 * * *"
        filters:
          branches:
            only: try-schedule-workflow
  jobs:
    - build

使用极狐GitLab CI/CD 中的rules的相同定时流水线示例:

job1:
  script:
    - make build
  rules:
    - if: $CI_PIPELINE_SOURCE == "schedule" && $CI_COMMIT_REF_NAME == "try-schedule-workflow"

保存流水线配置后,您可以在 极狐GitLab UI 中配置 cron 时间表,并且也可以在 UI 中启用或禁用计划。

手动运行

CircleCI 手动工作流示例:

release-branch-workflow:
  jobs:
    - build
    - testing:
        requires:
          - build
    - deploy:
        type: approval
        requires:
          - testing

使用极狐GitLab CI/CD 中的when: manual的相同工作流示例:

deploy_prod:
  stage: deploy
  script:
    - echo "Deploy to production server"
  when: manual
  environment: production

按分支过滤作业

规则 是一种机制,用于确定作业是否针对特定分支运行。

CircleCI 按分支过滤作业示例:

jobs:
  deploy:
    branches:
      only:
        - main
        - /rc-.*/

使用极狐GitLab CI/CD 中 rules 的相同工作流示例:

deploy:
  stage: deploy
  script:
    - echo "Deploy job"
  rules:
    - if: $CI_COMMIT_BRANCH == "main" || $CI_COMMIT_BRANCH =~ /^rc-/
  environment: production

缓存

极狐GitLab 提供了一种缓存机制,通过重用先前下载的依赖项来加快作业的构建时间。了解 缓存与产物的区别 对于充分利用这些功能非常重要。

CircleCI 使用缓存的作业示例:

jobs:
  job1:
    steps:
      - restore_cache:
          key: source-v1-< .Revision >
      - checkout
      - run: npm install
      - save_cache:
          key: source-v1-< .Revision >
          paths:
            - "node_modules"

使用极狐GitLab CI/CD 中 cache 的相同流水线示例:

test_async:
  image: node:latest
  cache:  # Cache modules in between jobs
    key: $CI_COMMIT_REF_SLUG
    paths:
      - .npm/
  before_script:
    - npm ci --cache .npm --prefer-offline
  script:
    - node ./specs/start.js ./specs/async.spec.js

上下文和变量

CircleCI 提供 Contexts 来安全地跨项目流水线传递环境变量。在极狐GitLab 中,可以创建一个群组来将相关项目组合在一起。在群组级别,CI/CD 变量 可以存储在单个项目之外,并安全地传递到跨多个项目的流水线中。

构建环境

CircleCI 提供 executors 作为运行特定作业的底层技术。在极狐GitLab 中,这是由 runners 完成的。

支持以下环境:

私有化部署 runner:

  • Linux
  • Windows
  • macOS

JihuLab.com 实例 runner:

机器和特定构建环境

标签 可用于在不同平台上运行作业,告诉极狐GitLab 哪些 runner 应该运行这些作业。

CircleCI 在特定环境中运行作业的示例:

jobs:
  ubuntuJob:
    machine:
      image: ubuntu-1604:201903-01
    steps:
      - checkout
      - run: echo "Hello, $USER!"
  osxJob:
    macos:
      xcode: 11.3.0
    steps:
      - checkout
      - run: echo "Hello, $USER!"

使用极狐GitLab CI/CD 中 tags 的相同作业示例:

windows job:
  stage: build
  tags:
    - windows
  script:
    - echo Hello, %USERNAME%!

osx job:
  stage: build
  tags:
    - osx
  script:
    - echo "Hello, $USER!"