如何为workflow_dispatch的环境输入匹配对应变量集?
根据Workflow Dispatch选择的环境匹配对应AWS角色ARN的方案
你需要创建带环境选择项的workflow_dispatch工作流,根据所选的test/cert/prod环境自动匹配对应的AWS IAM角色ARN,以下是两种实用的实现方案:
你的原始配置
on: workflow_dispatch: inputs: environment: description: The environment to deploy to required: true type: choice options: - "test" - "cert" - "prod" jobs: build: runs-on: ubuntu-latest steps: - uses: aws-actions/configure-aws-credentials@v2 with: aws-region: eu-west-1 role-session-name: Build role-to-assume: # What to use here?
方案1:用环境变量映射直接定义
在作业里定义环境到ARN的键值对,通过GitHub Actions的内置函数动态引用:
on: workflow_dispatch: inputs: environment: description: 部署目标环境 required: true type: choice options: - "test" - "cert" - "prod" jobs: build: runs-on: ubuntu-latest # 定义各环境对应的角色ARN env: ROLE_ARN_TEST: "arn:aws:iam::123456789012:role/test-deploy-role" ROLE_ARN_CERT: "arn:aws:iam::123456789012:role/cert-deploy-role" ROLE_ARN_PROD: "arn:aws:iam::123456789012:role/prod-deploy-role" steps: - uses: aws-actions/configure-aws-credentials@v2 with: aws-region: eu-west-1 role-session-name: Build # 动态拼接变量名,匹配所选环境的ARN role-to-assume: ${{ env[format('ROLE_ARN_{0}', upper(inputs.environment))] }}
这里用upper()把输入的环境名转成大写,再用format()拼接成对应的环境变量名,就能自动匹配到对应环境的ARN。
方案2:用GitHub Secrets存储敏感ARN(更安全)
如果ARN属于敏感信息,推荐存在GitHub仓库的Secrets中,避免明文暴露:
on: workflow_dispatch: inputs: environment: description: 部署目标环境 required: true type: choice options: - "test" - "cert" - "prod" jobs: build: runs-on: ubuntu-latest steps: - uses: aws-actions/configure-aws-credentials@v2 with: aws-region: eu-west-1 role-session-name: Build # 从Secrets中动态获取对应环境的ARN role-to-assume: ${{ secrets[format('ROLE_ARN_{0}', upper(inputs.environment))] }}
前置操作:
需要在仓库的 Settings > Secrets and variables > Actions 页面创建三个Secrets:
ROLE_ARN_TEST:存储test环境的角色ARNROLE_ARN_CERT:存储cert环境的角色ARNROLE_ARN_PROD:存储prod环境的角色ARN
额外建议
如果有大量随环境变化的配置项,还可以把这些配置单独放在一个YAML文件里(比如env-configs.yaml),提交到仓库后,用actions/checkout拉取代码,再用yq工具解析获取对应环境的配置值,适合配置复杂的场景。
内容的提问来源于stack exchange,提问作者A Jackson
相关产品推荐
相关产品推荐

