This documentation is available as Markdown for AI agents and LLMs. See the full Markdown index or append .md to any documentation URL.

从 CI 触发构建

编辑页面

了解如何在 EAS 上从 CI 环境(例如 GitHub Actions 等)为你的应用触发构建。


本文档概述了如何从 CI 环境(例如 GitHub Actions、Travis CI 等)为你的应用触发 EAS 构建。

Prerequisites

1 requirement

从本地机器成功构建一次

要从 CI 环境触发 EAS 构建,你的应用需要先配置为以非交互模式使用 EAS Build。请在本地终端中针对你希望在 CI 上支持的每个平台运行 eas build -p [all|android|ios],这样 eas build 命令就可以提示你完成任何它所需的额外配置。之后,这些配置将可用于未来的非交互式运行。

在本地运行一次构建可完成以下关键配置步骤:

  • 通过生成 projectId 在 EAS 上初始化项目。
  • 添加一个定义构建配置的 eas.json 文件。
  • 填充原生构建所需的关键应用配置属性,例如 android.packageNameios.bundleIdentifier
  • 确保已创建构建凭据,包括 Android keystore 以及 iOS 分发证书和 provisioning profile。

如果你还没有完成这些,请先查看 创建你的第一个构建 指南,准备好后再返回这里。

使用 EAS 工作流

EAS 工作流 是 Expo 提供的一项 CI/CD 服务,允许你在 EAS 上运行构建以及许多其他类型的任务。你可以使用 EAS 工作流来自动化开发和发布流程,例如创建开发构建或自动构建并提交到应用商店。

要使用 EAS 工作流创建构建,首先在 .eas/workflows/build.yml 中添加以下代码:

name: 构建 on: push: branches: - main jobs: build_android: name: 构建 Android 应用 type: build params: platform: android build_ios: name: 构建 iOS 应用 type: build params: platform: ios

当有提交推送到 main 分支时,此工作流将创建 Android 和 iOS 构建。你可以在 EAS Workflows 文档 中了解如何修改此工作流并串联其他类型的任务。

为其他 CI 服务配置你的应用。

提供个人访问令牌,以便在 CI 上使用你的 Expo 账户进行身份验证

接下来,我们需要确保我们能够在 CI 上以应用所有者的身份进行身份验证。可以通过在 CI 设置中将个人访问令牌存储到 EXPO_TOKEN 环境变量中来实现。

请参阅 个人访问令牌 了解如何创建访问令牌。

(可选)为你的 Apple 团队提供 ASC API 令牌

如果你的 iOS 凭据需要修复,我们将需要一个 ASC API 密钥,以便在 CI 中向 Apple 进行身份验证。一个常见的情况是你的 provisioning profile 需要重新签名。

你需要创建一个 API Key。接下来,你需要收集有关你的 Apple 团队的信息。

使用你收集到的信息,通过环境变量将其传递给构建命令。你需要传递以下内容:

  • EXPO_ASC_API_KEY_PATH:你的 ASC API Key .p8 文件的路径。例如,/path/to/key/AuthKey_SFB993FB5F.p8
  • EXPO_ASC_KEY_ID:你的 ASC API Key 的 key ID。例如,SFB993FB5F
  • EXPO_ASC_ISSUER_ID:你的 ASC API Key 的 issuer ID。例如,f9675cff-f45d-4116-bd2c-2372142cee09
  • EXPO_APPLE_TEAM_ID:你的 Apple Team ID。例如,77KQ969CHE
  • EXPO_APPLE_TEAM_TYPE:你的 Apple Team Type。有效类型为 IN_HOUSECOMPANY_OR_ORGANIZATIONINDIVIDUAL

如果你在 CI 上使用 ad hoc provisioning 运行 内部分发 构建,请刷新 ad hoc provisioning profile,以便包含上次构建之后添加的已注册设备。对于 eas build,请在 --non-interactive 一起传入 --refresh-ad-hoc-provisioning-profile。对于 EAS Workflows,请在构建任务的 params 中将 refresh_ad_hoc_provisioning_profile: true构建任务参数)。有关要求和示例命令,请参阅 CI 上的自动化

触发新构建

现在我们已经通过 Expo CLI 完成了身份验证,可以创建构建步骤了。

要触发新构建,我们将把以下脚本添加到我们的配置中:

Terminal
npx eas-cli build --platform all --non-interactive --no-wait

这将会在 EAS 上触发一个新构建。系统会打印出一个 URL,链接到 EAS 仪表板中该构建的进度页面。

Travis CI

将以下代码片段添加到项目仓库根目录下的 .travis.yml 中。

travis.yml
language: node_js node_js: - node - lts/* cache: directories: - ~/.npm before_script: - npm install -g npm@latest jobs: include: - stage: build node_js: lts/* script: - npm ci - npx eas-cli build --platform all --non-interactive --no-wait
GitLab CI

将以下代码片段添加到项目仓库根目录下的 .gitlab-ci.yml 中。

.gitlab-ci.yml
image: node:alpine cache: key: ${CI_COMMIT_REF_SLUG} paths: - .npm # 或者使用 Yarn: #- .yarn stages: - build before_script: - npm ci --cache .npm # 或者使用 Yarn: #- yarn install --cache-folder .yarn eas-build: stage: build script: - apk add --no-cache bash - npx eas-cli build --platform all --non-interactive --no-wait
Bitbucket Pipelines

将以下代码片段添加到项目仓库根目录下的 bitbucket-pipelines.yml 中。

bitbucket-pipelines.yml
image: node:alpine definitions: caches: npm: ~/.npm pipelines: default: - step: name: Build app deployment: test caches: - npm script: - apk add --no-cache bash - npm ci - npx eas-cli build --platform all --non-interactive --no-wait
CircleCI

将以下代码片段添加到项目仓库根目录下的 circleci/config.yml 中。

.circleci/config.yml
version: 2.1 executors: default: docker: - image: cimg/node:lts working_directory: ~/my-app jobs: eas_build: executor: default steps: - checkout - run: name: Install dependencies command: npm ci - run: name: Trigger build command: npx eas-cli build --platform all --non-interactive --no-wait workflows: build_app: jobs: - eas_build: filters: branches: only: master
GitHub Actions

将以下代码片段添加到项目仓库根目录下的 .github/workflows/eas-build.yml 中。

.github/workflows/eas-build.yml
name: EAS Build on: workflow_dispatch: push: branches: - main jobs: build: name: Install and build runs-on: ubuntu-latest steps: - uses: actions/checkout@v5 - uses: actions/setup-node@v6 with: node-version: 24 cache: npm - name: Setup Expo and EAS uses: expo/expo-github-action@v8 with: eas-version: latest token: ${{ secrets.EXPO_TOKEN }} - name: Install dependencies run: npm ci - name: Build on EAS run: eas build --platform all --non-interactive --no-wait