菜单

CI/CD 和发布流程

相关源文件

本文档描述了 React Native 的持续集成 (CI)、持续交付 (CD) 和发布流程。它涵盖了通过 GitHub Actions 工作流实现的自动化测试、构建和发布流水线。有关本地开发和测试的信息,请参阅 开发与工具

CI 系统概述

React Native 使用 GitHub Actions 进行持续集成和交付。CI 系统运行测试、构建工件并发布版本。该系统旨在通过跨多个平台、配置和 JavaScript 引擎进行测试来确保代码质量。

来源: .github/workflows/test-all.yml .github/workflows/publish-release.yml .github/workflows/nightly.yml

主要 CI 工作流

工作流触发器目的
test-all.ymlPull requests,Push 到 main 或 *-stable 分支运行所有测试,构建所有工件
publish-release.ymlTag push (v0..)将版本发布到 npm,Maven
nightly.yml计划任务(UTC 时间凌晨 2:15),手动触发发布 nightly 构建版本

来源: .github/workflows/test-all.yml .github/workflows/publish-release.yml .github/workflows/nightly.yml

构建和测试流水线

构建流水线由多个相互依赖的任务组成,用于准备、构建和测试 React Native 组件。

来源: .github/workflows/test-all.yml40-649

关键构建组件

  1. Hermes 构建过程:

    • Hermes 是 React Native 的默认 JavaScript 引擎
    • 为多种平台(macOS, iOS, Android, Linux, Windows)构建
    • 为 iOS 构建多个切片(设备、模拟器等)
  2. Android 构建流程:

    • 使用 Gradle 进行构建
    • 构建不同的变体(debug, release)
    • 为多种架构构建(arm64-v8a, x86 等)
  3. iOS 构建流程:

    • 使用 CocoaPods 进行依赖管理
    • 构建 RNTester 应用进行测试
    • 为不同的架构和配置构建
  4. NPM 包构建:

    • 收集平台构建的工件
    • 打包 React Native 以发布到 npm
    • 创建合适的发布版或 nightly 版本

来源: .github/actions/build-hermesc-apple/action.yml .github/actions/build-apple-slices-hermes/action.yml .github/actions/build-hermes-macos/action.yml .github/actions/build-android/action.yml .github/actions/build-npm-package/action.yml

测试流程

React Native 使用多种类型的测试来确保代码质量

来源: .github/workflows/test-all.yml123-407 .github/actions/test-js/action.yml .github/actions/test-ios-rntester/action.yml

测试矩阵

测试在各种配置下运行,以确保兼容性

平台架构JS 引擎构建类型其他变量
iOS新架构,旧架构Hermes, JSCDebug, ReleaseStaticLibraries, DynamicFrameworks
Android新架构,旧架构Hermes, JSCDebug, Release多种设备架构

端到端测试

端到端测试使用 Maestro 测试完全构建的应用

  1. RNTester 应用测试:测试 iOS 和 Android 上的 RNTester 应用
  2. 模板应用测试:测试使用 React Native 模板创建的新应用

来源: .github/workflows/test-all.yml198-407

发布流程

来源: .github/workflows/publish-release.yml .github/workflows/nightly.yml

发布类型

  1. 定期发布 (v0.X.Y)

    • 当新版本准备好时发布
    • 使用版本号标记(例如 v0.73.0)
    • 完整发布到 npm 和 Maven Central
  2. 发布候选版 (v0.X.Y-rc.Z)

    • 定期发布前用于测试的预发布版本
    • 使用 RC 后缀标记(例如 v0.73.0-rc.0)
    • 使用 next 标签发布到 npm
  3. 每日构建版:

    • 每晚自动构建
    • 包含 main 分支的最新代码
    • 使用 nightly 标签发布到 npm

来源: .github/workflows/publish-release.yml9-21 .github/workflows/nightly.yml9-22

发布工作流详情

发布流程通过 GitHub Actions 工作流实现自动化

  1. 触发器:

    • 定期发布和发布候选版本由推送 Tag 触发
    • Nightly 构建版本由计划任务或手动触发
  2. 构建流程:

    • 所有组件都已构建(Hermes, Android, iOS)
    • 创建 NPM 包
    • 生成 NPM 包
  3. 发布:

    • 发布到 npm 注册表
    • 发布 Android 工件到 Maven Central
    • 更新模板包
  4. 文档:

    • 生成 Changelog
    • 创建 GitHub 发布草稿
  5. 验证:

    • 确保工件已正确发布到 npm
    • 验证 Maven 工件是否可用

来源: .github/workflows/publish-release.yml157-232 .github/actions/create-release/action.yml

构建工件

来源: .github/actions/build-npm-package/action.yml .github/actions/build-android/action.yml41-60

版本策略

React Native 遵循语义化版本控制,但有一些调整

  1. 版本格式: v0.X.Y
    • X: 0.x 系列中的主版本号
    • Y: 次版本号/补丁版本号
  2. 稳定分支:
    • 命名为 0.X-stable
    • 用于发布补丁版本
  3. 发布候选版本:
    • 格式: v0.X.Y-rc.Z
    • Z 为每个新的 RC 版本递增

版本号在构建过程中设置,使用脚本更新 package.json 和其他相关文件。

来源: .github/workflows/publish-release.yml4-6 .github/workflows/create-release.yml6-8

发布清单

发布过程中发生的步骤如下

  1. 版本准备:

    • 更新 package.json 中的版本号
    • 设置正确的发布类型(release, nightly)
  2. 构建流程:

    • 为所有平台构建所有组件
    • 生成 NPM 包
  3. 发布流程:

    • 发布到 npm 注册表
    • 将 Android 工件发布到 Maven Central
    • 更新模板包
  4. 文档:

    • 生成 changelog
    • 创建 GitHub 发布
  5. 验证:

    • 验证 npm 包是否可用
    • 验证 Maven 工件是否可用
    • 检查 GitHub 发布

来源: .github/workflows/publish-release.yml157-232 .github/actions/create-release/action.yml

运行时工件 vs. 构建时工件

来源: .github/workflows/test-all.yml40-130 .github/actions/build-npm-package/action.yml79-103

CI/CD 系统架构

CI/CD 系统架构包含以下组件

  1. GitHub Actions Workflows: 定义 CI/CD 流水线
  2. GitHub Actions Actions: 用于构建和测试的可复用组件
  3. Artifact Storage: GitHub Actions 构件存储
  4. Distribution Systems: npm, Maven Central

该系统设计为可复现的,使开发人员能够在本地运行与 CI 中相同的构建过程。

来源: .github/workflows/test-all.yml .github/workflows/publish-release.yml .github/workflows/nightly.yml

排查 CI/CD 问题

CI/CD 流水线中可能出现的常见问题

  1. 测试失败:

    • 检查测试日志以获取详细信息
    • 尝试使用相同的配置在本地重现
  2. 构建失败:

    • 检查是否有缺失的依赖项
    • 验证环境配置
  3. 发布失败:

    • 检查是否存在身份验证问题
    • 验证版本冲突

在排查问题时,检查 GitHub Actions 中的工作流日志是识别问题的首要方法。

来源: .github/workflows/test-all.yml651-661

持续集成(CI)与持续交付/部署(CD)

React Native 使用

  1. 持续集成 (Continuous Integration): 自动测试更改
    • 针对所有拉取请求运行
    • 跨多个平台和配置进行测试
  2. 持续交付 (Continuous Delivery): 自动构建构件
    • 构建 NPM 包和原生构件
    • 为发布做准备
  3. 手动发布部署 (Manual Release Deployment): 最终发布步骤
    • 通过推送标签或手动触发
    • 发布到 npm 和 Maven Central

来源: .github/workflows/test-all.yml .github/workflows/publish-release.yml .github/workflows/nightly.yml