我正在尝试根据环境的布尔选择构建一个环境策略矩阵,但我无法构建它。我如何根据选择 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 矩阵。
最简单的环境矩阵可能如下所示:
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"]
这就是我们需要的矩阵。