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

如何自动将所有GitHub Secrets设置为环境变量?

解决方法

方案1:用工作流env块批量映射(推荐,可控性强)

你可以在工作流的env字段中统一声明需要注入的Secrets和环境变量,新增Secrets时仅需在env里添加一行,比在run脚本里写零散的export更整洁:

jobs:
  deploy:
    runs-on: ubuntu-latest
    env:
      STAGE: ${{ github.ref_name }}  # 替代原${GITHUB_REF##*/},GitHub Actions原生变量更简洁
      MAILCHIMP_API_KEY: ${{ secrets.MAILCHIMP_API_KEY }}
      MAILCHIMP_LIST_ID: ${{ secrets.MAILCHIMP_LIST_ID }}
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
      
      - name: Deploy backend
        run: |
          cd aws
          npm install
          cdk deploy --all --outputs-file output.json --require-approval never

方案2:脚本自动导出所有Secrets(完全自动,需谨慎)

如果需要完全自动导出仓库所有Secrets为环境变量,可以用jq解析secrets上下文生成export命令。注意:这会导出所有仓库Secrets,可能包含敏感信息,仅限私有仓库使用:

- name: Deploy backend
  run: |
    cd aws
    npm install
    # 遍历所有Secrets并导出为环境变量
    for secret in $(echo '${{ toJSON(secrets) }}' | jq -r 'keys[]'); do
      export "$secret=${{ secrets[$secret] }}"
    done
    cdk deploy --all --outputs-file output.json --require-approval never
  • 依赖:Ubuntu-latest runner默认已安装jq,其他环境需提前安装。
  • 注意:若Secrets名称包含特殊字符(如-),需调整脚本处理引号。

方案3:CDK直接读取AWS Secrets Manager(安全最佳实践)

如果你的Secrets已经存储在AWS Secrets Manager,完全可以跳过工作流传递环境变量,直接在CDK代码中读取:

import * as secretsmanager from 'aws-cdk-lib/aws-secretsmanager';

// 从Secrets Manager读取密钥
const mailchimpApiKey = secretsmanager.Secret.fromSecretNameV2(this, 'MailchimpApiKey', 'your-secret-name');
const mailchimpListId = secretsmanager.Secret.fromSecretNameV2(this, 'MailchimpListId', 'your-list-id-secret-name');

这种方式不需要在GitHub Actions中处理任何Secrets,避免了环境变量传递的风险,也无需修改工作流。


内容的提问来源于stack exchange,提问作者Matthew D'vertola

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 04:56:20