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

如何将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 21:37:43