如何使用布尔输入创建 github 动作矩阵

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

我正在尝试根据环境的布尔选择构建一个环境策略矩阵,但我无法构建它。我如何根据选择 Dev 或 QA 或两者来构建?

name:  Build and Deploy 
on:
  workflow_dispatch:
    inputs:
      Dev:
        type: boolean
        default: false
        description: Dev
      QA:
        type: boolean
        default: false
        description: QA
      

  push:
    branches:
      - id/githubActions
jobs:
  
  prep_matrix:
    runs-on: ubuntu-latest
    outputs:
      matrix: ${{steps.set-matrix.outputs.matrix}}
    steps:
      - id: set-matrix
        run: |
          Dev=${{github.event.inputs.Dev}}
          QA=${{github.event.inputs.QA}}
          
          matrix=$(jq --arg 'map(
            . | select($Dev == "true") or ($QA == "true")
          )' deployment_matrix.json )
          echo "matrix={\"include\":$(echo $matrix)}" >> $GITHUB_OUTPUT`

我无法为 Dev 或 QA 构建 json 矩阵。

json shell github github-actions jq
1个回答
0
投票

最简单的环境矩阵可能如下所示:

jobs:
  example_matrix:
    strategy:
      matrix:
        environment: [dev, qa]

创建方法如下:

prep_matrix:
  runs-on: ubuntu-latest
  outputs:
    matrix: ${{steps.set-matrix.outputs.matrix}}
  steps:
    - id: set-matrix
      matrix=$(
                { 
                  [ "${{ inputs.Dev }}" = true ] && echo '"dev"'
                  [ "${{ inputs.Qa }}" = true ] && echo '"qa"'
                } | jq -sc
              )
      echo "matrix="$matrix" >> $GITHUB_OUTPUT`

表达式的格式是为了便于阅读,但也可以写在一行上。

这个

[ "${{ inputs.Dev }}" = true ] && echo '"dev"'

如果设置了输入 Dev,则创建单个 JSON 字符串

"dev"

然后

jq -sc

创建一行 json

["dev","qa"]

这就是我们需要的矩阵。

© www.soinside.com 2019 - 2024. All rights reserved.