复用GitHub Actions Workflow时,with表达式引用env为何报指定异常?
GitHub Actions调用外部工作流时,with参数无法引用env上下文的问题
问题重现
在调用另一个仓库的工作流时,尝试在with参数的表达式中引用env变量,触发了两个错误:
工作流无效。.github/workflows/sample.yml(第6行,第5列):意外值 'env';.github/workflows/sample.yml(第9行,第23列):无法识别的命名值: 'env'。位于表达式的第1位:env.SOMETHING
对应的配置代码:
on: push: jobs: call-workflow-in-another-repository: uses: my-org/my-repo/.github/workflows/sample-workflow.yml@v1 env: SOMETHING: example with: something-sent: ${{ env.SOMETHING }} something-else-sent: ${{ format('{0}_another_usage_of_env_variable', env.SOMETHING) }}
用户提到官方文档说明:
除了id和uses键之外,您可以在步骤的任何键的值中使用env上下文
问题原因
- 复用工作流的Job不支持Job层级的
env字段:使用uses引用外部工作流的Job属于「可复用工作流调用」,这类Job的配置字段是受限的,仅允许name、uses、with、secrets、permissions等特定字段,不能在Job层级添加env,这就是第一个错误“意外值 'env'”的来源。 - 该场景下无法访问Job层级的
env上下文:官方文档中提到的“步骤中使用env上下文”,指的是常规Job内部steps下的单个步骤,而非这种直接复用整个工作流的Job。在可复用工作流调用的with参数中,无法直接引用Job层级定义的env变量。
解决方案
将环境变量定义在Workflow层级,这样整个工作流的所有Job都能访问该上下文,包括可复用工作流调用的with参数:
修改后的配置示例:
on: push: # 将env定义在Workflow层级 env: SOMETHING: example jobs: call-workflow-in-another-repository: uses: my-org/my-repo/.github/workflows/sample-workflow.yml@v1 with: something-sent: ${{ env.SOMETHING }} something-else-sent: ${{ format('{0}_another_usage_of_env_variable', env.SOMETHING) }}
如果变量仅需在该调用Job中使用,也可以直接在with参数中硬编码值,或者使用secrets(敏感信息场景)、Workflow上下文的其他变量(如github.ref等)。
内容的提问来源于stack exchange,提问作者Shawn
相关产品推荐
相关产品推荐

