如何将GitHub Actions可复用工作流的environment移至调用工作流?
解决方案
要把environment: Development从可复用工作流转到调用工作流,需要按照GitHub Actions的规则调整两个工作流的结构,具体步骤如下:
1. 修改可复用工作流
在可复用工作流的workflow_call段中,新增environment输入参数,并声明需要接收的ARM密钥secrets,同时将job中的硬编码环境替换为输入参数:
name: Reusable Terraform Action on: workflow_call: inputs: working-folder: description: The name of the client folder to process required: true type: string # 新增environment输入参数,让调用方可以指定环境 environment: description: Target deployment environment required: true type: string # 声明需要从调用方接收的secrets secrets: ARM_CLIENT_ID: required: true ARM_CLIENT_SECRET: required: true ARM_TENANT_ID: required: true ARM_SUBSCRIPTION_ID: required: true jobs: Terraform: # 引用输入的environment参数,不再硬编码 environment: ${{ inputs.environment }} env: # 使用调用方传入的secrets ARM_CLIENT_ID: ${{ secrets.ARM_CLIENT_ID }} ARM_CLIENT_SECRET: ${{ secrets.ARM_CLIENT_SECRET }} ARM_TENANT_ID: ${{ secrets.ARM_TENANT_ID }} ARM_SUBSCRIPTION_ID: ${{ secrets.ARM_SUBSCRIPTION_ID }} runs-on: ubuntu-latest defaults: run: shell: bash working-directory: ${{ inputs.working-folder }}
2. 修改调用工作流
在调用工作流中,通过with传递environment参数,并将secrets放在与with同级的secrets块中(之前的错误在于把secrets嵌套在了with里面):
name: Deployment TF Reuse on: workflow_dispatch: jobs: walm: uses: ./.github/workflows/reuse-terraform.yml with: working-folder: r3us-walm # 传递environment参数到可复用工作流 environment: Development # secrets块与with同级,对应可复用工作流声明的密钥名称 secrets: ARM_CLIENT_ID: ${{ secrets.ARM_CLIENT_ID }} ARM_CLIENT_SECRET: ${{ secrets.ARM_CLIENT_SECRET }} ARM_TENANT_ID: ${{ secrets.ARM_TENANT_ID }} ARM_SUBSCRIPTION_ID: ${{ secrets.ARM_SUBSCRIPTION_ID }}
错误原因说明
- GitHub Actions不允许直接在引用可复用工作流的job上定义
environment,必须通过可复用工作流暴露输入参数来传递环境配置。 - 之前调用工作流中的
secrets缩进错误,应该与with同级,而非嵌套在with内部,否则会触发语法解析错误。
内容的提问来源于stack exchange,提问作者Wolfgang
相关产品推荐
相关产品推荐

