此页面介绍了 Cypress 如何使用 CircleCI 进行持续集成和部署。内容涵盖工作流结构、构建环境、缓存机制和二进制构建过程。有关 V8 快照优化的具体信息,请参阅 V8 快照优化;有关二进制分发过程,请参阅 二进制分发。
CircleCI 用于构建、测试和分发跨多个平台(Windows、macOS 和 Linux)及架构(x64 和 ARM64)的 Cypress。CircleCI 配置管理着
主要的 CircleCI 配置在 .circleci/workflows.yml 中定义,附加配置在 .circleci/cache-version.txt 中以控制缓存版本。
来源:.circleci/workflows.yml33-89
CircleCI 执行器定义了作业运行的环境。Cypress 为不同平台使用不同的执行器
| 执行器 | 平台 | 描述 |
|---|---|---|
| cy-doc | Linux | Debian Bullseye,Node.js 20.18.1 |
| non-root-docker-user | Linux | 与 cy-doc 相同,但以非 root 用户身份运行 |
| darwin-amd64 | macOS (Intel) | macOS Intel 构建的机器执行器 |
| darwin-arm64 | macOS (ARM) | macOS ARM 构建的机器执行器 |
| linux-arm64 | Linux ARM64 | Ubuntu 20.04,ARM 资源类 |
| windows | Windows | Windows Server 2022 with GUI |
每个执行器都有平台特定的环境变量和资源配置,以优化构建过程。
来源:.circleci/workflows.yml91-149
该配置定义了许多可重用的命令,以标准化跨作业的常见操作
工作区和工件管理
setup_should_persist_artifacts:确定是否应保留工件restore_workspace_binaries:附加工作区并验证二进制文件restore_cached_workspace:附加工作区并解压依赖项依赖管理
caching-dependency-installer:安装和缓存依赖项prepare-modules-cache:准备 node 模块以供缓存restore_cached_system_tests_deps:还原系统测试依赖项的缓存构建操作
build-and-persist:构建包并将其持久化到工作区build-better-sqlite3:构建 better-sqlite3 以兼容 glibc 2.28测试
run-driver-integration-tests:运行驱动程序集成测试run-new-ui-tests:运行 UI 组件测试run-system-tests:运行系统测试run-binary-system-tests:测试已构建的二进制文件环境设置
install-required-node:安装所需的 Node.js 版本install-browsers:安装测试浏览器(Chrome、Firefox)install-webkit-deps:安装 WebKit 依赖项来源:.circleci/workflows.yml151-842
Cypress 采用复杂的缓存策略来加快构建速度并减少资源使用
缓存系统采用多层方法
来源:.circleci/workflows.yml206-490 .circleci/cache-version.txt1-4
二进制构建过程是 CI/CD 管道的关键部分,涉及多个步骤
此过程会生成平台特定的二进制文件(Windows .exe、macOS .app、Linux 可执行文件),然后进行打包分发。
来源:scripts/binary/build.ts74-224 scripts/binary/binary-cleanup.js1-247 scripts/binary/meta.ts1-106
工作流会根据分支模式进行选择性触发,以优化 CI 资源
# Main build runs on:
- develop branch
- release branches (pattern: /^release\/\d+\.\d+\.\d+$/)
- v8 snapshot cache update branches
# macOS and Linux ARM64 builds run on:
- develop branch
- release branches
- specific feature branches
# Windows builds run on:
- develop branch
- release branches
- specific feature branches
这种选择性方法可确保在关键分支上进行完整测试,同时为典型的功能分支节省资源。
来源:.circleci/workflows.yml33-89
Cypress 测试在多个平台和浏览器上运行,以确保兼容性
| 平台 | 浏览器 | 测试类型 |
|---|---|---|
| Linux x64 | Chrome, Firefox, WebKit | 驱动程序、UI、系统、二进制 |
| Linux ARM64 | Chrome | 由于架构限制,仅部分支持 |
| Windows | Chrome, Edge | 驱动程序、UI、系统 |
| macOS | Chrome, Safari | 驱动程序、UI、系统 |
特定浏览器的测试可确保 Cypress 与每种浏览器独特的实现方式都能正常工作。
来源:.circleci/workflows.yml544-574 .circleci/workflows.yml642-728
测试通过后,可以通过单独的工作流发布二进制文件
发布过程使用一个单独的 CircleCI 项目(cypress-publish-binary)来处理二进制文件的实际分发。
来源:scripts/binary/trigger-publish-binary-pipeline.js1-44
Cypress 的 CircleCI 配置提供了一个强大的 CI/CD 管道,可确保跨多个平台的质量,并优化构建和分发过程。复杂的缓存策略、并行测试执行和平台特定的优化使得 Cypress 测试框架能够高效地开发和发布。