You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在GitHub Actions中定义嵌套环境变量?

解决GitHub Actions动态环境变量的嵌套定义问题

你遇到的错误是因为GitHub Actions的env字段仅支持键值对形式的字符串变量,不允许嵌套的映射(也就是不能在env里定义dev、qa这类包含子键的对象),直接写嵌套结构会触发"A mapping was not expected"报错。

下面提供两种可行的实现方式,满足你根据分支动态加载对应AWS凭证的需求:

方式一:利用矩阵策略(Matrix)+ 条件筛选

通过定义环境矩阵,结合分支条件匹配对应环境配置,逻辑清晰且易维护:

name: push-deploy-docker

on:
  push:
    branches:
      - 'develop'
      - 'master'
      - 'release-*' # 补充release分支匹配规则

jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        include:
          - env: dev
            aws-access-key: ${{ secrets.DEV_AWS_ACCESS_KEY_ID }}
            aws-secret-key: ${{ secrets.DEV_AWS_SECRET_ACCESS_KEY }}
            aws-region: us-east-1 # 替换为dev环境实际区域
          - env: qa
            aws-access-key: ${{ secrets.QA_AWS_ACCESS_KEY_ID }}
            aws-secret-key: ${{ secrets.QA_AWS_SECRET_ACCESS_KEY }}
            aws-region: us-east-1 # 替换为qa环境实际区域
          - env: prod
            aws-access-key: ${{ secrets.PROD_AWS_ACCESS_KEY_ID }}
            aws-secret-key: ${{ secrets.PROD_AWS_SECRET_ACCESS_KEY }}
            aws-region: us-east-1 # 替换为prod环境实际区域
    # 根据当前分支筛选对应的矩阵项
    if: >-
      (github.ref_name == 'master' && matrix.env == 'prod') ||
      (contains(github.ref_name, 'release') && matrix.env == 'qa') ||
      (github.ref_name == 'develop' && matrix.env == 'dev')
    steps:
      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: ${{ matrix.aws-access-key }}
          aws-secret-access-key: ${{ matrix.aws-secret-key }}
          aws-region: ${{ matrix.aws-region }}

方式二:通过表达式动态拼接Secret名称

不需要额外定义嵌套结构,直接在步骤中根据AWS_ENV的值拼接对应Secret名称,实现动态引用:

name: push-deploy-docker

on:
  push:
    branches:
      - 'develop'
      - 'master'
      - 'release-*'

env:
  AWS_ENV: ${{ github.ref_name == 'master' && 'prod' || contains(github.ref_name, 'release') && 'qa' || 'dev' }}

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: ${{ secrets[format('{0}_AWS_ACCESS_KEY_ID', env.AWS_ENV)] }}
          aws-secret-access-key: ${{ secrets[format('{0}_AWS_SECRET_ACCESS_KEY', env.AWS_ENV)] }}
          aws-region: ${{ secrets[format('{0}_AWS_DEFAULT_REGION', env.AWS_ENV)] }}
          # 注意:需提前在仓库Secrets中创建对应环境的区域变量,比如DEV_AWS_DEFAULT_REGION

注意事项

  • 方式二中的format函数会将AWS_ENV的值(dev/qa/prod)与固定前缀拼接,需确保仓库Secrets命名严格遵循{ENV}_AWS_*格式。
  • 若prod环境凭证未定义,需补充对应的PROD_AWS_ACCESS_KEY_ID等Secrets。

内容的提问来源于stack exchange,提问作者Chris Dao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 10:13:27