如何在 GitHub 操作上参数化秘密
How to parameterize secrets on GitHub Action
我们在存储库 (dev/prd) 中有两个分支,每个分支代表一个部署环境。我们还有每个分支的 GitHub 个动作秘密,在开发分支中它应该是 dev_react_api,在 prd 分支中它应该是 prd_react_api.
现在我们正在使用这些秘密 secrets.dev_react_api 和 secrets.prd_react_api
开发 GitHub 操作工作流程
是否有像下面这样参数化 GitHub 操作机密的解决方案?
# only pseudo-code
env:
branch_name: github.ref
secrets["${env.branch_name}_react_api"]
它应该像您使用动态名称显示的那样工作。 secrets
只是一个变量,您可以显式 secrets.x
隐式 secrets['x']
提供键名。动态构建您的密钥就可以正常工作。额外的 env branch_name
也是不需要的,因为您可以直接在字符串中获取该值。
如果您有付费的 GitHub 计划或正在使用 public 存储库,您还可以查看 Environments,它通过定义两个单独的来完全解决这个问题每个环境都有所需的秘密。
您可以为此使用环境机密。
首先转到:设置 -> 环境 -> 新环境
创建一个新环境并确保您的环境名称与您的分支名称匹配
现在您可以创建任何您想要的环境机密,现在的诀窍是,您需要两个文件才能使用环境机密。第一个是 main.yml 第二个是你的(例如)deploy.yml
on:
push:
branches:
- main
- staging
- development
permissions: write-all
jobs:
deploy:
uses: ./.github/workflows/deploy.yml
with:
environment: ${{ github.ref_name }}
secrets:
AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }}
第二个使用环境的文件:
name: Deployment
on:
workflow_call:
inputs:
environment:
required: true
type: string
secrets:
AWS_S3_BUCKET:
required: true
jobs:
deploy:
name: Deploy
environment: ${{ github.ref_name }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
- uses: jakejarvis/s3-sync-action@master
name: Deploy to S3
env:
AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }}
with:
args: --acl public-read --follow-symlinks --delete
现在您可以创建任意数量的具有不同参数的环境!
有关详细信息,请参阅:https://github.com/olivatooo/github-actions-build-deploy-with-staging-production-environment/
我们在存储库 (dev/prd) 中有两个分支,每个分支代表一个部署环境。我们还有每个分支的 GitHub 个动作秘密,在开发分支中它应该是 dev_react_api,在 prd 分支中它应该是 prd_react_api.
现在我们正在使用这些秘密 secrets.dev_react_api 和 secrets.prd_react_api
开发 GitHub 操作工作流程是否有像下面这样参数化 GitHub 操作机密的解决方案?
# only pseudo-code
env:
branch_name: github.ref
secrets["${env.branch_name}_react_api"]
它应该像您使用动态名称显示的那样工作。 secrets
只是一个变量,您可以显式 secrets.x
隐式 secrets['x']
提供键名。动态构建您的密钥就可以正常工作。额外的 env branch_name
也是不需要的,因为您可以直接在字符串中获取该值。
如果您有付费的 GitHub 计划或正在使用 public 存储库,您还可以查看 Environments,它通过定义两个单独的来完全解决这个问题每个环境都有所需的秘密。
您可以为此使用环境机密。
首先转到:设置 -> 环境 -> 新环境
创建一个新环境并确保您的环境名称与您的分支名称匹配
现在您可以创建任何您想要的环境机密,现在的诀窍是,您需要两个文件才能使用环境机密。第一个是 main.yml 第二个是你的(例如)deploy.yml
on:
push:
branches:
- main
- staging
- development
permissions: write-all
jobs:
deploy:
uses: ./.github/workflows/deploy.yml
with:
environment: ${{ github.ref_name }}
secrets:
AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }}
第二个使用环境的文件:
name: Deployment
on:
workflow_call:
inputs:
environment:
required: true
type: string
secrets:
AWS_S3_BUCKET:
required: true
jobs:
deploy:
name: Deploy
environment: ${{ github.ref_name }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
- uses: jakejarvis/s3-sync-action@master
name: Deploy to S3
env:
AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }}
with:
args: --acl public-read --follow-symlinks --delete
现在您可以创建任意数量的具有不同参数的环境!
有关详细信息,请参阅:https://github.com/olivatooo/github-actions-build-deploy-with-staging-production-environment/