无法为工作流程创建 JSON 矩阵对象

问题描述 投票:0回答:1

当我设置

$i -lt 3
时,它会循环两次并创建两个条目。 GitHub PowerShell 工作流程能够通过两个作业生成矩阵,这很好。

enter image description here

但是当我设置

$i -lt 2
时,我希望它能够通过单个作业生成矩阵,但事实并非如此。

enter image description here

name: Generate Matrix

on:
  workflow_dispatch:
  push:
    branches:
      - main

jobs:
  generate-matrix:
    runs-on: ubuntu-latest
    outputs:
      DISMATRIX: ${{ steps.matrix.outputs.DISMATRIX }}
    steps:
      - name: Set up Git repository
        uses: actions/checkout@v2

      - name: Generate Matrix
        id: matrix
        shell: pwsh
        run: |
          $dismatrix = @()
          $counter = 1
          
          # Single Loop
          for ($i = 1; $i -lt 2; $i++) {
            $statcustomenvName = "StatCustomEnvName$counter"
            $customenvName = "CustomEnvName$counter"

            # Increment the counter
            $counter++

            # Add unique values to the $dismatrix array
            $dismatrix += @{
              "DISPLAYLIST" = $statcustomenvName
              "CUSTOMENVNAME" = $customenvName
            }
          }

          
          # Output the matrix as JSON
          echo "DISMATRIX=$($dismatrix | ConvertTo-Json -Compress -Depth 100)" >> "$env:GITHUB_OUTPUT"

      
  Trigger_Service:
    name: "${{ matrix.DISPLAYLIST }}"
    needs: [generate-matrix]
    environment: 
      name: ${{ matrix.CUSTOMENVNAME }}
    runs-on: 
      group: ARE-Shared
    
    strategy:
      matrix: 
        include: ${{fromJSON(needs.generate-matrix.outputs.DISMATRIX)}}
      fail-fast: false

    steps:

      - name: Split Matrix name for use 
        id: instancedetails
        run: |
          
          Write-Host "[email protected] ${{ matrix.customenvName }}"          

我已经使用

for
循环来创建这个最小的测试用例,但是,我的实际案例从数据库获取条目,该条目可以是一个或多个。

JSON 变量

DISMATRIX
$i -lt 3
正常工作时的输出:

Run echo "[{"CUSTOMENVNAME":"CustomEnvName1","DISPLAYLIST":"StatCustomEnvName1"},{"CUSTOMENVNAME":"CustomEnvName2","DISPLAYLIST":"StatCustomEnvName2"}]"
[{
CUSTOMENVNAME:CustomEnvName1,DISPLAYLIST:StatCustomEnvName1},{CUSTOMENVNAME:CustomEnvName2,DISPLAYLIST:StatCustomEnvName2}]

当 JSON 变量

DISMATRIX
不与
$i -lt 2
一起使用时的输出:

Run echo "{"CUSTOMENVNAME":"CustomEnvName1","DISPLAYLIST":"StatCustomEnvName1"}"
{CUSTOMENVNAME:CustomEnvName1,DISPLAYLIST:StatCustomEnvName1}

我在为这两种情况创建所需的 JSON 时遇到困难。

因此,我需要一个通用的解决方案来创建 JSON 策略矩阵,该矩阵将有助于根据任何动态条件填充一个或多个作业。可以推荐一下吗?

json powershell github github-actions
1个回答
0
投票

试试这个

if ($i -eq 2) {
  echo "DISMATRIX=$( @($dismatrix) | ConvertTo-Json -Compress -Depth 100)" >> "$env:GITHUB_OUTPUT"
}
else {
  echo "DISMATRIX=$($dismatrix | ConvertTo-Json -Compress -Depth 100)" >> "$env:GITHUB_OUTPUT"
}
© www.soinside.com 2019 - 2024. All rights reserved.