从 CI 触发构建
编辑页面
了解如何在 EAS 上从 CI 环境(例如 GitHub Actions 等)为你的应用触发构建。
For the complete documentation index, see llms.txt. Use this file to discover all available pages.
本文档概述了如何从 CI 环境(例如 GitHub Actions、Travis CI 等)为你的应用触发 EAS 构建。
1 requirement
1 requirement
要从 CI 环境触发 EAS 构建,你的应用需要先配置为以非交互模式使用 EAS Build。请在本地终端中针对你希望在 CI 上支持的每个平台运行 eas build -p [all|android|ios],这样 eas build 命令就可以提示你完成任何它所需的额外配置。之后,这些配置将可用于未来的非交互式运行。
在本地运行一次构建可完成以下关键配置步骤:
- 通过生成
projectId在 EAS 上初始化项目。 - 添加一个定义构建配置的 eas.json 文件。
- 填充原生构建所需的关键应用配置属性,例如
android.packageName和ios.bundleIdentifier。 - 确保已创建构建凭据,包括 Android keystore 以及 iOS 分发证书和 provisioning profile。
如果你还没有完成这些,请先查看 创建你的第一个构建 指南,准备好后再返回这里。
使用 EAS 工作流
EAS 工作流 是 Expo 提供的一项 CI/CD 服务,允许你在 EAS 上运行构建以及许多其他类型的任务。你可以使用 EAS 工作流来自动化开发和发布流程,例如创建开发构建或自动构建并提交到应用商店。
要使用 EAS 工作流创建构建,首先在 .eas/workflows/build.yml 中添加以下代码:
name: Build 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_HOUSE、COMPANY_OR_ORGANIZATION或INDIVIDUAL。
如果你在 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 完成了身份验证,可以创建构建步骤了。
要触发新构建,我们将把以下脚本添加到我们的配置中:
- npx eas-cli build --platform all --non-interactive --no-wait这将会在 EAS 上触发一个新构建。系统会打印出一个 URL,链接到 EAS 仪表板中该构建的进度页面。
--no-wait标志会在构建被触发后立即退出该步骤。在 EAS 执行构建期间,CI 执行时间不会计费。但是,只有在触发 EAS Build 成功时,你的 CI 才会报告构建任务通过。
Travis CI
将以下代码片段添加到项目仓库根目录下的 .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 中。
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 中。
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 中。
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 中。
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: 22 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