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

使用 Git 标签触发生产部署

编辑页面

了解如何在 EAS Workflows 上通过 Git 标签触发生产部署。


推送到发布分支会在每次提交时运行生产工作流,即使是那些我们从未打算作为发布的提交。

学习成果

  • 将生产工作流触发器从 release/* 分支切换为匹配 v*.*.* 的 Git 标签
  • 通过从 main 推送标签来发布,并在 EAS 仪表板上查看工作流运行情况
  • 将预发布标签(如 v1.0.0-rc.1)排除在生产之外,并在单独的工作流中运行候选版本

作为发布事件的标签

EAS Workflows 支持通过带有 tags 列表的 on.push 进行基于标签的触发。只有当匹配通配符模式的标签被推送到远程仓库时,工作流才会运行。Git 标签是与特定提交和版本绑定的一次性事件,不同于可以随时间更新的分支。这使得标签非常适合用于标记发布。

基于标签的发布工作流适合以下团队:

  • 希望 Git 中的版本号与他们发布给应用用户的版本号一致
  • 直接从 main 发布,而不是维护长期存在的发布分支
  • 希望通过版本清晰地审计每一次发布提交

将 production.yml 切换为标签触发器

打开上一章中的 .eas/workflows/production.yml 工作流,并将 on.push.branches 触发器替换为 on.push.tags。工作流中的其他内容保持不变。

1

更改触发器

branches 触发器替换为 tags 触发器。tags 的 glob 会匹配像 v1.0.0v2.3.7v10.0.0-beta.1 这样的标签。

.eas/workflows/production.yml
name: 部署到生产环境 on: push: tags: ['v*.*.*'] jobs: fingerprint: name: 指纹 type: fingerprint environment: production get_android_build: name: 检查是否存在现有的 Android 构建 needs: [fingerprint] type: get-build params: fingerprint_hash: ${{ needs.fingerprint.outputs.android_fingerprint_hash }} profile: production get_ios_build: name: 检查是否存在现有的 iOS 构建 needs: [fingerprint] type: get-build params: fingerprint_hash: ${{ needs.fingerprint.outputs.ios_fingerprint_hash }} profile: production build_android: name: 构建 Android needs: [get_android_build] if: ${{ !needs.get_android_build.outputs.build_id }} type: build params: platform: android profile: production build_ios: name: 构建 iOS needs: [get_ios_build] if: ${{ !needs.get_ios_build.outputs.build_id }} type: build params: platform: ios profile: production update_android: name: 发布 Android 更新 needs: [get_android_build] if: ${{ needs.get_android_build.outputs.build_id }} type: update params: branch: production platform: android update_ios: name: 发布 iOS 更新 needs: [get_ios_build] if: ${{ needs.get_ios_build.outputs.build_id }} type: update params: branch: production platform: ios

为了让标签触发工作流,我们需要选择一个符合团队流程的模式。常见模式包括:

  • ['v*'] 匹配任何以 v 开头的标签
  • ['v*.*.*'] 匹配严格的三段语义化版本(推荐)

我们不需要更改任何其他任务。fingerprintget-buildbuildupdate 任务的工作方式完全相同,因为它们都是基于提交进行操作的。

2

提交并推送工作流更改

将对 production.yml 的更改提交并推送到 main。由于我们将触发器从分支改为了标签,因此这不会触发工作流。

Terminal
git add .eas/workflows/production.yml

git commit -m "将 production 工作流切换为标签触发器"

git push origin main

3

创建一个标签来测试工作流

要运行工作流,我们需要推送一个与 production.yml 中定义的 glob 模式匹配的标签。

在我们的示例项目中做一个 TypeScript/JavaScript 更改,提交它,然后推送一个新标签:

Terminal
git add .

git commit -m "修复欢迎文案"

git tag v0.1.0

git push origin main --tags

工作流会在 v0.1.0 标签上触发。打开 EAS 仪表板,在 Workflows 下可以看到“部署到生产环境”正在运行,并且其分支显示为 refs/tags/v0.1.0

由于这是首次基于标签发布并生成指纹的生产运行,build 任务会同时为 Android 和 iOS 运行。后续指向 TypeScript/JavaScript 更改的标签会跳过 build 任务,直接进入 update 任务。

发布候选版本的预发布标签

v*.*.* 这个 glob 也会匹配像 v1.0.0-rc.1 这样的预发布标签,这会把发布候选版本推送给应用用户。为避免发布候选版本进入生产环境,请将它们从生产工作流的触发条件中排除:

.eas/workflows/production.yml
on: push: tags: ['v*.*.*', '!v*.*.*-rc.*']

如果想在正式发布前验证发布候选版本,可以创建一个单独的工作流,只匹配预发布标签(tags: ['v*.*.*-rc.*']),并复用 fingerprintget-buildbuild 这几个任务,但不包含 updatesubmit 任务。这样会运行相同的流水线,但不会有任何内容到达应用用户。

概要

Chapter 6: Tag-based releases

We switched the production workflow trigger from a release branch to a Git tag, tested the change by pushing a versioned tag from main, and learned how to gate release candidates with a pre-release tag glob.

In the next chapter, learn how to deploy web builds to EAS Hosting from a workflow.

Next: Chapter 7: Web deployments