GitHub Actions工作流与作业间环境变量访问报错求助
解决GitHub Actions作业层级引用工作流环境变量的错误
错误原因
- 上下文引用限制:在作业层级的
env字段中,无法使用env上下文引用工作流层级的环境变量。此时作业的环境变量上下文尚未初始化,因此会抛出Unrecognized named-value: 'env'错误。 - YAML缩进错误:原代码中
dev作业下的runs-on、env缩进不一致,会导致工作流解析失败。
修正方案
方案一:直接引用原始Secrets/Vars(推荐)
保留工作流层级的环境变量定义,在作业层级的env中直接引用原始的secrets和vars,同时修正缩进问题:
env: AWS_REGION: ${{ vars.AWS_REGION }} ACCOUNT_ID: ${{ secrets.TRAINING_ACCOUNT_ID }} jobs: dev: runs-on: ubuntu-latest env: ECR_REGISTRY: ${{ secrets.TRAINING_ACCOUNT_ID }}.dkr.ecr.${{ vars.AWS_REGION }}.amazonaws.com steps: - name: build run: | aws --region ${{ env.AWS_REGION }} ecr get-login-password | docker login --username AWS --password-stdin ${{ env.ECR_REGISTRY }}
方案二:将环境变量定义移至步骤层级
如果希望通过工作流层级的env中转传递变量,可以把ECR_REGISTRY的定义移到步骤层级的env中,此时env上下文已经可用:
env: AWS_REGION: ${{ vars.AWS_REGION }} ACCOUNT_ID: ${{ secrets.TRAINING_ACCOUNT_ID }} jobs: dev: runs-on: ubuntu-latest steps: - name: build env: ECR_REGISTRY: ${{ env.ACCOUNT_ID }}.dkr.ecr.${{ env.AWS_REGION }}.amazonaws.com run: | aws --region ${{ env.AWS_REGION }} ecr get-login-password | docker login --username AWS --password-stdin ${{ env.ECR_REGISTRY }}
关键注意事项
- 作业层级的
env字段仅支持引用secrets、vars、github等顶级上下文,不能引用env上下文(包括工作流层级的环境变量),因为env上下文是基于当前作业/步骤的环境变量,在作业初始化阶段还未生成。 - YAML文件对缩进要求严格,所有同级元素的缩进必须保持一致,否则会导致工作流无法正常解析。
内容的提问来源于stack exchange,提问作者change198
相关产品推荐
相关产品推荐

