CircleCI 是一个云原生 CI/CD 平台,用于构建、测试和部署应用。以下内容依据该技能文档整理,主要说明其配置方式与常用能力。
一、用途与适用时机 当需要设置 CircleCI 的 CI/CD 流水线、使用 orbs 实现可复用配置、通过缓存和并行优化构建时间、配置工作流与审批、以及管理 contexts 和密钥时,可使用本技能。
二、前提条件
- CircleCI 账号已连接仓库
- 已在 CircleCI 控制台启用项目
- 具备基本 YAML 知识
三、配置文件 配置文件位于 .circleci/config.yml,使用版本 2.1。可在其中声明 orbs、executors、jobs 和 workflows。文档示例展示了 build、test、deploy 三个作业,以及一条 build-test-deploy 工作流:deploy 依赖 test,test 依赖 build,且 deploy 通过 filters 限定仅在 main 分支运行。构建作业使用 persist_to_workspace 保存 dist,部署作业使用 attach_workspace 恢复数据。
四、执行器 文档介绍了三类执行器:
- Docker 执行器:可指定多个镜像(如 cimg/node:20.10 与 cimg/postgres:15.0),并可设置环境变量与工作目录。
- Machine 执行器:使用虚拟机镜像(如 ubuntu-2204:current),可指定 resource_class。
- macOS 执行器:指定 Xcode 版本与 resource_class(如 macos.m1.medium.gen1)。
五、缓存
- 依赖缓存:使用 restore_cache 与 save_cache,以 checksum 文件内容作为缓存键(如 v1-deps-{{ checksum "package-lock.json" }})。
- 多键缓存:可提供多个候选键按顺序匹配,例如包含分支、校验和以及回退键。
六、工作区 通过 persist_to_workspace 可在作业之间传递数据(如 dist、node_modules),后续作业使用 attach_workspace 恢复。
七、并行 通过 parallelism 设置并行度,结合 circleci tests glob 与 circleci tests split --split-by=timings 拆分测试文件,并用 store_test_results 存储测试结果。
八、工作流
- 顺序作业:通过 requires 定义依赖关系。
- 并行作业:多个测试作业同时依赖 build,再由 deploy 依赖这些测试作业。
- 手动审批:使用 type: approval 设置 hold 作业。
- 定时工作流:使用 triggers.schedule.cron 设置(如 "0 2 * * *")。
- 分支与标签过滤:通过 filters 限定分支(如 main、正则 /feature-./)和标签(如 /^v./)。
九、Orbs orbs 用于复用配置,可声明在版本 2.1 配置中。文档列出常见 orbs:node、docker、aws-cli、aws-ecr、aws-ecs、gcp-cli、kubernetes、slack。示例展示了使用 aws-cli 与 kubernetes orb 执行 kubectl apply。
十、Docker 构建 使用 docker orb 时,可通过 setup_remote_docker 指定版本,再执行 docker/check、docker/build、docker/push,并使用 $CIRCLE_SHA1 作为标签。
十一、环境变量与密钥
- 项目变量:在 CircleCI 项目设置的 Environment Variables 中设置。
- Contexts:在工作流作业中通过 context 字段引用环境专属密钥(如 staging-secrets、production-secrets)。
- 变量使用:可在 run 步骤的 environment 中定义变量,并在命令中引用(如 $S3_BUCKET)。
十二、制品与测试结果 使用 store_test_results 存储测试结果,使用 store_artifacts 存储制品(可指定 destination)。
十三、资源类 文档列出可用资源类:small(1 vCPU、2GB RAM)、medium(2 vCPU、4GB RAM,默认)、large(4 vCPU、8GB RAM)、xlarge(8 vCPU、16GB RAM)。
十四、常见问题
- 缓存无法恢复:每次构建都缓存未命中。建议检查缓存键格式,确认校验和文件未变化。
- 工作区附加失败:找不到持久化的工作区。建议确认 persist_to_workspace 作业已完成并检查路径。
- Docker 层缓存:Docker 构建缓慢。建议在项目设置中启用 Docker Layer Caching(文档标注为付费功能)。
十五、最佳实践 文档建议:为常见任务使用 orbs;实施积极的缓存策略;使用工作区在作业间共享数据;使用并行拆分测试以加快构建;使用 contexts 管理环境专属密钥;定义可复用的执行器;存储测试结果以获得洞察。
十六、相关技能 文档列出相关技能:github-actions(GitHub CI/CD)、docker-management(容器构建)、aws-ecs-fargate(ECS 部署)。
需注意,文档未提供具体的收费标准、平台支持范围或效果承诺等信息,相关细节暂未提供。