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

如何在同一GitHub Workflow中实现Job间自动触发(含环境审批)

解决方案

步骤1:调整Matrix依赖关系,实现Job串行执行

首先修改createloopmatrix job中的PowerShell脚本,为每个Matrix条目添加前一个Job的依赖名称,让两个Job按顺序串行触发:

$color = "hello, yellow"
$values = $color.Split(',').Trim() # 移除空格避免Job名称带无效空格

$matrix = @()
$envVars = @{}
$previousJobName = "createloopmatrix" # 第一个Job依赖矩阵生成Job

foreach ($value in $values) {
  $matrixName = "MA_$value"
  $matrix += @{ 
    "DISPLAYLIST" = $matrixName; 
    "CUSTOMENVNAME" = $value;
    "DEPENDENTNAME" = $previousJobName
  }
  $envVars."$value" = $value
  Write-Output "Value: $value"
  $previousJobName = $matrixName # 更新为当前Job名称,作为下一个Job的依赖
}

echo "MATRIX=$($matrix | ConvertTo-Json -Compress -Depth 100)" >> "$env:GITHUB_OUTPUT"
echo "ENV-VARS=$($envVars | ConvertTo-Json -Compress -Depth 100)" >> "$env:GITHUB_OUTPUT"

修改后,Trigger_Service的needs字段会正确关联前一个Job,MA_yellow只会在MA_hello执行完成后才会进入待触发状态。

步骤2:实现第二个Job的自动审批

GitHub环境审批默认需要手动批准每个环境的部署,要让MA_yellow自动执行,有两种可行方式:

方式A:调整环境审批规则(推荐)

如果hello和yellow环境的审批人员相同,可直接为yellow环境设置豁免规则:

  1. 进入仓库的Settings > Environments,找到yellow环境
  2. 编辑部署保护规则,在Required reviewers中添加允许自动批准的人员/团队;或设置Allow deployments from specific branches(如果触发分支固定为main)
  3. 若支持,启用Skip deployments if previously approved选项,允许同一工作流运行中已批准的情况下跳过审批

方式B:用GitHub API自动批准部署请求

在MA_hello的Job中添加步骤,完成后调用GitHub API自动批准MA_yellow的部署请求:

steps:
  - name: Split Matrix name for use
    run: |
      Write-Host "Inside Matrix"
  - name: Auto-approve next job deployment
    if: matrix.DISPLAYLIST == 'MA_hello'
    env:
      GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      REPO: ${{ github.repository }}
      RUN_ID: ${{ github.run_id }}
    run: |
      # 获取待审批的yellow环境部署ID
      DEPLOYMENT_ID=$(gh api repos/$REPO/actions/runs/$RUN_ID/pending_deployments --jq '.[] | select(.environment_name == "yellow") | .id')
      # 自动批准部署
      if [ -n "$DEPLOYMENT_ID" ]; then
        gh api --method POST repos/$REPO/actions/deployments/$DEPLOYMENT_ID/reviews -f state="approved" -f comment="Auto-approved after MA_hello completion"
      fi

默认的GITHUB_TOKEN已包含deployments:write权限,无需额外配置。

最终完整Workflow代码

name: NEW Loop Over Comma-Separated Values

on:
  push:
    branches:
      - main

jobs:
  createloopmatrix:
    runs-on: windows-latest
    outputs: 
      MATRIX: ${{ steps.set-matrix.outputs.MATRIX }}
      ENV-VARS: ${{ steps.set-matrix.outputs.ENV-VARS }}

    steps:
      - name: Run PowerShell 
        id: set-matrix
        shell: pwsh
        run: |
          $color = "hello, yellow"
          $values = $color.Split(',').Trim()

          $matrix = @()
          $envVars = @{}
          $previousJobName = "createloopmatrix"

          foreach ($value in $values) {
            $matrixName = "MA_$value"
            $matrix += @{ 
              "DISPLAYLIST" = $matrixName; 
              "CUSTOMENVNAME" = $value;
              "DEPENDENTNAME" = $previousJobName
            }
            $envVars."$value" = $value
            Write-Output "Value: $value"
            $previousJobName = $matrixName
          }

          echo "MATRIX=$($matrix | ConvertTo-Json -Compress -Depth 100)" >> "$env:GITHUB_OUTPUT"
          echo "ENV-VARS=$($envVars | ConvertTo-Json -Compress -Depth 100)" >> "$env:GITHUB_OUTPUT"
          
  Trigger_Service:
    name: ${{ matrix.DISPLAYLIST }}
    needs: ${{ matrix.DEPENDENTNAME }}
    runs-on: windows-latest
    strategy:
      matrix:
        include: ${{ fromJson(needs.createloopmatrix.outputs.MATRIX) }}
    environment:
      name: ${{ matrix.CUSTOMENVNAME }}
    
    steps:
      - name: Split Matrix name for use
        run: |
          Write-Host "Inside Matrix"
      - name: Auto-approve next job deployment
        if: matrix.DISPLAYLIST == 'MA_hello'
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          REPO: ${{ github.repository }}
          RUN_ID: ${{ github.run_id }}
        run: |
          DEPLOYMENT_ID=$(gh api repos/$REPO/actions/runs/$RUN_ID/pending_deployments --jq '.[] | select(.environment_name == "yellow") | .id')
          if [ -n "$DEPLOYMENT_ID" ]; then
            gh api --method POST repos/$REPO/actions/deployments/$DEPLOYMENT_ID/reviews -f state="approved" -f comment="Auto-approved after MA_hello completion"
          fi

内容的提问来源于stack exchange,提问作者Ashar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 13:03:10