菜单

CircleCI 配置

相关源文件

此页面介绍了 Cypress 如何使用 CircleCI 进行持续集成和部署。内容涵盖工作流结构、构建环境、缓存机制和二进制构建过程。有关 V8 快照优化的具体信息,请参阅 V8 快照优化;有关二进制分发过程,请参阅 二进制分发

概述

CircleCI 用于构建、测试和分发跨多个平台(Windows、macOS 和 Linux)及架构(x64 和 ARM64)的 Cypress。CircleCI 配置管理着

  • 跨不同浏览器(Chrome、Firefox、Edge、WebKit)运行测试
  • 构建平台特定的二进制文件以供分发
  • 通过 V8 快照优化性能
  • 打包和分发应用程序
  • 通过各种测试套件确保代码质量

配置结构

主要的 CircleCI 配置在 .circleci/workflows.yml 中定义,附加配置在 .circleci/cache-version.txt 中以控制缓存版本。

工作流架构

来源:.circleci/workflows.yml33-89

执行器和环境

CircleCI 执行器定义了作业运行的环境。Cypress 为不同平台使用不同的执行器

执行器平台描述
cy-docLinuxDebian Bullseye,Node.js 20.18.1
non-root-docker-userLinux与 cy-doc 相同,但以非 root 用户身份运行
darwin-amd64macOS (Intel)macOS Intel 构建的机器执行器
darwin-arm64macOS (ARM)macOS ARM 构建的机器执行器
linux-arm64Linux ARM64Ubuntu 20.04,ARM 资源类
windowsWindowsWindows Server 2022 with GUI

每个执行器都有平台特定的环境变量和资源配置,以优化构建过程。

来源:.circleci/workflows.yml91-149

命令和可重用步骤

该配置定义了许多可重用的命令,以标准化跨作业的常见操作

关键命令类别

  1. 工作区和工件管理

    • setup_should_persist_artifacts:确定是否应保留工件
    • restore_workspace_binaries:附加工作区并验证二进制文件
    • restore_cached_workspace:附加工作区并解压依赖项
  2. 依赖管理

    • caching-dependency-installer:安装和缓存依赖项
    • prepare-modules-cache:准备 node 模块以供缓存
    • restore_cached_system_tests_deps:还原系统测试依赖项的缓存
  3. 构建操作

    • build-and-persist:构建包并将其持久化到工作区
    • build-better-sqlite3:构建 better-sqlite3 以兼容 glibc 2.28
  4. 测试

    • run-driver-integration-tests:运行驱动程序集成测试
    • run-new-ui-tests:运行 UI 组件测试
    • run-system-tests:运行系统测试
    • run-binary-system-tests:测试已构建的二进制文件
  5. 环境设置

    • install-required-node:安装所需的 Node.js 版本
    • install-browsers:安装测试浏览器(Chrome、Firefox)
    • install-webkit-deps:安装 WebKit 依赖项

来源:.circleci/workflows.yml151-842

缓存策略

Cypress 采用复杂的缓存策略来加快构建速度并减少资源使用

Node 模块缓存

缓存系统采用多层方法

  1. 缓存密钥生成:根据 package.json、yarn.lock 和平台生成缓存密钥
  2. 每周 Yarn 缓存:维护每周的 Yarn 包缓存
  3. 平台特定缓存:为不同平台提供不同的缓存
  4. 非 root 用户兼容性:针对非 root 用户场景的特殊处理

来源:.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 x64Chrome, Firefox, WebKit驱动程序、UI、系统、二进制
Linux ARM64Chrome由于架构限制,仅部分支持
WindowsChrome, Edge驱动程序、UI、系统
macOSChrome, 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 测试框架能够高效地开发和发布。