This documentation is available as Markdown for AI agents and LLMs. See the full Markdown index or append .md to any documentation URL.
EAS Workflows 中的环境变量
编辑页面
EAS Workflows 作业中可用的环境变量参考,包括 env 上下文和其他工作器变量。
每个工作流作业都会在一个工作器上运行,该工作器为其提供了一组可用的环境变量。你可以通过以下两种方式读取这些变量:
- 使用
${{ env.NAME }}插值语法,可在作业插值值的任何位置使用(例如params、if、env和run中)。 - 使用标准 Shell 变量(
$NAME),或在run步骤中通过process.env.NAME访问。
name: Print environment jobs: print: steps: # 在命令运行前进行插值。 - run: echo "Project: ${{ env.EAS_BUILD_PROJECT_ID }}" # 在运行时从 Shell 环境中读取。 - run: echo "Project: $EAS_BUILD_PROJECT_ID"
优先级
作业中可用的变量合并自三个来源。当同一个名称在多个来源中定义时,列表中位置更高的来源优先:
| 来源 | 描述 |
|---|---|
作业 env | 使用 env 键在作业上设置的变量。这些变量是纯文本,直接定义在工作流文件中。 |
eas.json 构建配置文件 env | 对于 build 作业,eas.json 中由 params.profile 选择的配置文件里的 env。 |
| EAS 环境变量 | 在 EAS 上为作业的环境(production、preview 或 development)存储的变量名称和值。 |
除此之外,工作器还会设置一些附加变量,例如 EAS_BUILD_ID 和 CI。请避免使用 EAS_ 前缀命名自己的变量,以免这些变量被覆盖。
作业环境
作业可以读取哪些 EAS 环境变量取决于其环境:production(默认)、preview 或 development。只有分配给该环境的变量才会向作业公开。
每种作业以不同方式解析其环境:
build作业从 eas.json 中构建配置文件的environment推断环境。submit作业从所提交的构建继承环境。maestro和maestro-cloud作业默认为preview。- 其他作业默认为
production。
显式设置 jobs.<job_id>.environment 可以覆盖默认值,并使作业与其配套的构建配置文件保持同步。有关为作业选择环境的更多详细信息,请参阅在 EAS Workflows 中使用环境变量。
${{ env }} 上下文
${{ env }} 上下文 是一个以名称为键的环境变量记录。它在作业上下文中可用,而不能在工作流的顶层使用。例如,你可以在作业的 params、if、env、outputs 和 run 中使用它,但不能在顶层的 on 触发器中使用。
jobs: notify: type: slack params: # 读取 SLACK_WEBHOOK_URL EAS 环境变量。 webhook_url: ${{ env.SLACK_WEBHOOK_URL }} message: '部署已完成'
插值会在两个地方发生,这会影响 ${{ env.NAME }} 可以解析出的内容:
- 作业配置(
params、if、outputs以及env本身的值)会在作业分派给工作器之前进行插值。在此时,env包含已解析的环境所对应的 EAS 环境变量。额外的工作器变量和作业自身的env值在此时尚不可用。 run命令会在工作器上进行插值,此时env反映完整的运行时环境:EAS 环境变量、作业的env,以及额外变量。
因此,应在 run 步骤中读取诸如 EAS_BUILD_ID 的变量,而不是在作业的 params 中读取。在 run 步骤中,${{ env.EAS_BUILD_ID }} 和 $EAS_BUILD_ID 是等价的。
从类型为 secret 或 sensitive 的 EAS 环境变量中插值的值,会在工作流日志中被隐藏。
上下文变量
环境变量并不是作业可以插值的唯一内容。相同的 ${{ ... }} 语法还会公开多个用于描述工作流运行的上下文对象。上文介绍的 env 上下文就是其中之一。其他上下文如下所述。有关插值语法以及可用的上下文函数(例如 toJSON、fromJSON 和 success()),请参阅语法。
如需在运行时查看任何上下文的完整内容,请使用toJSON将其打印出来。例如:run: echo '${{ toJSON(github) }}'。
github
触发工作流的 GitHub 事件中的字段。使用 eas workflow:run 启动运行时,event_name 为 workflow_dispatch,其他字段为空。
github { triggering_actor, // 触发运行的用户,例如 jonexpo event_name, // 'pull_request'、'push'、'schedule' 或 'workflow_dispatch' sha, // 提交 SHA ref, // 完整 ref,例如 refs/heads/main ref_name, // 短 ref,例如 main ref_type, // 'branch'、'tag' 或 'other' commit_message, // 仅适用于 push 和 schedule 事件 label, // 标签名称,适用于 pull_request_labeled 事件 repository, // 例如 expo/expo repository_owner, // 例如 expo event { // 完整的 GitHub webhook 负载 action, head_commit { message, id }, // 仅适用于 push 和 schedule 事件 pull_request { number, title, body, state, // 'open' 或 'closed' draft, merged, html_url, user { login }, labels, // { name } 数组 head { ref, sha }, // 源分支 base { ref, sha }, // 目标分支 created_at, updated_at, merged_at, // ... 以及 GitHub Pull Request webhook 负载中的其他字段 }, inputs, // workflow_dispatch 输入 schedule, // 计划运行所使用的 Cron 表达式 number, } }
event 对象包含完整的 GitHub webhook 负载。有关详细的字段参考和示例,请参阅语法指南中的 github。
inputs
使用 workflow_dispatch 手动启动工作流时提供的输入记录。以其他方式触发工作流时为空。
jobs: greet: steps: - run: echo "Hello, ${{ inputs.name }}!"
needs
当前作业的 needs 中列出的上游作业记录。每个条目都会提供作业的 status(success、failure 或 skipped)及其 outputs。
jobs: notify: needs: [build] steps: - run: echo "Build status: ${{ needs.build.status }}"
after
当前作业的 after 中列出的上游作业记录,无论这些作业是否成功。每个条目都提供与 needs 相同的 status 和 outputs 结构。
jobs: notify: after: [build] steps: - run: echo "Build status: ${{ after.build.status }}"
steps
当前作业中各步骤的记录,以步骤的 id 为键。每个条目都会公开通过 set-output 函数设置的 outputs。此上下文仅在作业的步骤中可用。
jobs: my_job: steps: - id: step_1 run: set-output my_greeting "hello" - run: echo "${{ steps.step_1.outputs.my_greeting }}"
metadata
与作业关联的构建元数据。对于 build 作业会填充此元数据;对于没有构建元数据的作业类型(例如自定义作业),则为空对象({})。
metadata { buildProfile, // 来自 eas.json 的构建配置,例如 production appVersion, // 应用版本,例如 1.0.0 appBuildVersion, // 构建号(iOS)或版本代码(Android) sdkVersion, // Expo SDK 版本,例如 54.0.0 runtimeVersion, // EAS Update 的运行时版本 gitCommitHash, // 执行构建所依据的 Git 提交 distribution, // 'store' 或 'internal' }
workflow
有关当前工作流运行的信息。
workflow { id, // 工作流运行的 ID name, // 工作流名称 filename, // 工作流文件的名称,例如 deploy.yml url, // EAS 控制面板中该运行的 URL }
jobs: notify: type: slack params: message: | Workflow run completed: ${{ workflow.name }} View details: ${{ workflow.url }}
app_store_connect
有关与此次运行关联的 App Store Connect 实体的信息。此上下文仅存在于由 App Store Connect 事件触发的工作流中。
app_store_connect { app { id }, build_upload { id, state, // 'awaiting_upload'、'processing'、'failed' 或 'complete' cf_bundle_version, cf_bundle_short_version_string, platform, uploaded_date, created_date, build { id }, }, app_version { id, state }, external_beta { id, state }, beta_feedback { id, type, // 'crash' 或 'screenshot' url, }, }
on: app_store_connect: build_upload: states: - complete jobs: notify: type: slack params: webhook_url: ${{ env.SLACK_WEBHOOK_URL }} message: | Upload complete for app: ${{ app_store_connect.app.id }} Upload state: ${{ app_store_connect.build_upload.state }}
有关填充各字段的事件域和完整示例,请参阅语法指南中的 app_store_connect。
额外的环境变量
除了您设置的变量外,worker 还会在虚拟机(VM)上运行的每个作业中提供多个变量,例如 EAS_BUILD_ID、EAS_BUILD_PROJECT_ID 和 CI。这些变量在运行时读取,因此请在 run 步骤中引用它们。完整列表请参见内置环境变量。
Worker 还会公开标准工具链变量,例如 HOME、PATH、LANG、ANDROID_HOME、ANDROID_SDK_ROOT 和 JAVA_HOME。它们的确切值取决于 worker 镜像,并且可能发生变化。
在作业中设置环境变量
要定义自己的变量,请在作业中使用 env 键。值可以引用其他上下文属性。
jobs: my_job: env: APP_VARIANT: staging COMMIT: ${{ github.sha }} steps: - run: echo "Building $APP_VARIANT at $COMMIT"
与同一作业中的后续步骤共享值
使用 set-env 命令在一个步骤中计算值,并在同一作业的后续步骤中读取该值。该命令位于工作线程的 PATH 中。它是 set-output 的环境变量对应命令:set-output 会公开一个命名的作业输出,而 set-env 会向作业的后续步骤公开一个环境变量。
jobs: my_job: steps: - run: set-env GENERATED_TAG "v$(date +%Y%m%d)" # `set-env` only affects later steps, so the value is available here. - run: echo "Tag is $GENERATED_TAG"
为项目的环境创建和管理环境变量及机密信息。
工作流中可用的完整插值上下文和函数集参考。