💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# Migrating from CircleCI > 原文:[https://docs.gitlab.com/ee/ci/migration/circleci.html](https://docs.gitlab.com/ee/ci/migration/circleci.html) * [`config.yml` vs `gitlab-ci.yml`](#configyml-vs-gitlab-ciyml) * [Jobs](#jobs) * [Docker image definition](#docker-image-definition) * [Workflows](#workflows) * [Parallel and sequential job execution](#parallel-and-sequential-job-execution) * [Scheduled run](#scheduled-run) * [Manual run](#manual-run) * [Filter job by branch](#filter-job-by-branch) * [Caching](#caching) * [Contexts and variables](#contexts-and-variables) * [Orbs](#orbs) * [Build environments](#build-environments) * [Machine and specific build environments](#machine-and-specific-build-environments) # Migrating from CircleCI[](#migrating-from-circleci "Permalink") 如果您当前正在使用 CircleCI,则可以将 CI / CD 管道迁移到[GitLab CI / CD](../introduction/index.html) ,并开始使用其所有强大功能. 查看我们的[CircleCI 与 GitLab](https://about.gitlab.com/devops-tools/circle-ci-vs-gitlab.html)比较,以了解有什么不同. 在开始迁移之前,我们已经收集了一些您可能会觉得有用的资源. [快速入门指南](../quick_start/README.html)很好地概述了 GitLab CI / CD 的工作方式. 您可能还对[Auto DevOps](../../topics/autodevops/index.html)感兴趣,可以将其用于构建,测试和部署应用程序,而几乎不需要或根本不需要进行任何配置. 对于高级 CI / CD 团队, [自定义项目模板](../../user/admin_area/custom_project_templates.html)可以启用管道配置的重用. 如果您有未在此处回答的问题, [GitLab 社区论坛](https://forum.gitlab.com/)将是一个很好的资源. ## `config.yml` vs `gitlab-ci.yml`[](#configyml-vs-gitlab-ciyml "Permalink") CircleCI 的`config.yml`配置文件定义了脚本,作业和工作流程(在 GitLab 中称为"阶段"). 在 GitLab 中,对存储库根目录中的`.gitlab-ci.yml`文件使用类似的方法. ### Jobs[](#jobs "Permalink") 在 CircleCI 中,作业是执行特定任务的步骤的集合. 在 GitLab 中, [作业](../yaml/README.html#introduction)也是配置文件中的基本元素. 在 GitLab CI / CD 中,不需要`checkout`参数,因为系统会自动获取存储库. CircleCI 示例作业定义: ``` jobs: job1: steps: - checkout - run: "execute-script-for-job1" ``` GitLab CI / CD 中相同作业定义的示例: ``` job1: script: "execute-script-for-job1" ``` ### Docker image definition[](#docker-image-definition "Permalink") CircleCI 在作业级别定义图像,GitLab CI / CD 也支持该图像. 此外,GitLab CI / CD 支持全局设置此设置,以供所有未定义`image`作业使用. CircleCI 示例图像定义: ``` jobs: job1: docker: - image: ruby:2.6 ``` Example of the same image definition in GitLab CI/CD: ``` job1: image: ruby:2.6 ``` ### Workflows[](#workflows "Permalink") CircleCI 确定具有`workflows`作业的运行顺序. 这也可用于确定并发,顺序,计划或手动运行. GitLab CI / CD 中的等效功能称为[stage](../yaml/README.html#stages) . 同一阶段的作业并行运行,并且仅在先前阶段完成后才运行. 默认情况下,当作业失败时,将跳过下一阶段的执行,但是即使[在](../yaml/README.html#allow_failure)作业失败之后,也可以继续执行下一阶段. 有关可使用的不同类型的管道的指南,请参见["管道体系结构概述](../pipelines/pipeline_architectures.html) ". 可以定制管道来满足您的需求,例如大型复杂项目或具有独立定义组件的 monorepo. #### Parallel and sequential job execution[](#parallel-and-sequential-job-execution "Permalink") 以下示例显示了作业如何并行或顺序运行: 1. `job1`和`job2`并行运行(在 GitLab CI / CD 的`build`阶段). 2. 仅在`job1`和`job2`成功完成之后(在`test`阶段), `job1` `job3`运行. 3. 仅在`job3`成功完成之后(在`deploy`阶段), `job3` `job4`运行. 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 job 1: stage: build script: make build dependencies job 2: stage: build script: make build artifacts job3: stage: test script: make test job4: stage: deploy script: make deploy ``` #### Scheduled run[](#scheduled-run "Permalink") GitLab CI / CD 具有易于使用的 UI 来[调度管道](../pipelines/schedules.html) . 同样,可以使用[规则](../yaml/README.html#rules)来确定是否应将作业包括在计划的管道中或从计划的管道中排除. 计划的工作流程的 CircleCI 示例: ``` commit-workflow: jobs: - build scheduled-workflow: triggers: - schedule: cron: "0 1 * * *" filters: branches: only: try-schedule-workflow jobs: - build ``` 使用 GitLab CI / CD 中的[`rules`](../yaml/README.html#rules)使用同一调度管道的示例: ``` job1: script: - make build rules: - if: '$CI_PIPELINE_SOURCE == "schedule" && $CI_COMMIT_REF_NAME == "try-schedule-workflow"' ``` 保存管道配置后,您可以在[GitLab UI 中](../pipelines/schedules.html#configuring-pipeline-schedules)配置 cron 计划,并且还可以在 UI 中启用或禁用计划. #### Manual run[](#manual-run "Permalink") 手动工作流程的 CircleCI 示例: ``` release-branch-workflow: jobs: - build - testing: requires: - build - deploy: type: approval requires: - testing ``` 使用[`when: manual`](../yaml/README.html#whenmanual) GitLab CI / CD 中的[`when: manual`](../yaml/README.html#whenmanual)的相同工作流程示例: ``` deploy_prod: stage: deploy script: - echo "Deploy to production server" when: manual ``` ### Filter job by branch[](#filter-job-by-branch "Permalink") [规则](../yaml/README.html#rules)是一种机制,用于确定作业是否将针对特定分支运行. 按分支过滤的作业的 CircleCI 示例: ``` jobs: deploy: branches: only: - master - /rc-.*/ ``` 在 GitLab CI / CD 中使用`rules`的相同工作流程示例: ``` deploy_prod: stage: deploy script: - echo "Deploy to production server" rules: - if: '$CI_COMMIT_BRANCH == "master"' ``` ### Caching[](#caching "Permalink") GitLab 提供了一种缓存机制,可通过重用以前下载的依赖项来加快作业的构建时间. 重要的是要了解[缓存和工件](../caching/index.html#cache-vs-artifacts)之间的区别,以充分利用这些功能. 使用缓存的作业的 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`的同一管道的示例: ``` image: node:latest # Cache modules in between jobs cache: key: $CI_COMMIT_REF_SLUG paths: - .npm/ before_script: - npm ci --cache .npm --prefer-offline test_async: script: - node ./specs/start.js ./specs/async.spec.js ``` ## Contexts and variables[](#contexts-and-variables "Permalink") CircleCI 提供了[上下文,](https://s0circleci0com.icopy.site/docs/2.0/contexts/)以跨项目管道安全地传递环境变量. 在 GitLab 中,可以创建一个[组](../../user/group/index.html)来将相关项目组装在一起. 在组级别, [变量](../variables/README.html#group-level-environment-variables)可以存储在各个项目之外,并安全地传递到跨多个项目的管道中. ## Orbs[](#orbs "Permalink") 有两个 GitLab 问题需要解决 CircleCI Orb,以及 GitLab 如何实现类似功能. * [https://gitlab.com/gitlab-com/Product/-/issues/1151](https://gitlab.com/gitlab-com/Product/-/issues/1151) * [https://gitlab.com/gitlab-org/gitlab/-/issues/195173](https://gitlab.com/gitlab-org/gitlab/-/issues/195173) ## Build environments[](#build-environments "Permalink") CircleCI 为`executors`提供`executors`特定工作的基础技术. 在 GitLab 中,这是由[Runners](https://docs.gitlab.com/runner/)完成的. 支持以下环境: 自我管理的跑步者: * Linux * Windows * macOS GitLab.com 共享跑步者: * Linux * Windows * [Planned: macOS](https://gitlab.com/gitlab-com/gl-infra/infrastructure/-/issues/5720) ### Machine and specific build environments[](#machine-and-specific-build-environments "Permalink") 通过告诉 GitLab 哪些 Runners 应该运行作业, [标签](../yaml/README.html#tags)可以用于在不同平台上运行作业. 在特定环境中运行的作业的 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!" ```