GitHub Actions:如何通过workflow_dispatch输入覆盖默认矩阵?
实现Workflow Dispatch输入覆盖矩阵默认值
要实现通过workflow_dispatch输入覆盖矩阵的默认Python版本列表,同时支持单值或JSON数组格式的输入,你需要通过动态生成矩阵的方式实现——GitHub Actions原生不支持直接在矩阵中引用workflow输入,因此需要先通过预处理Job生成符合要求的矩阵JSON,再传递给测试Job使用。
完整实现示例
name: CICD on: push: branches: - main workflow_dispatch: inputs: py_version: description: "Python版本:可输入单值(如3.11)或JSON数组(如[3.5, 2.7])" default: "[3.7, 3.10]" jobs: # 预处理Job:根据触发事件生成动态矩阵 generate_matrix: runs-on: ubuntu-22.04 outputs: matrix: ${{ steps.set_matrix.outputs.matrix }} steps: - id: set_matrix run: | # 根据触发事件选择矩阵源 if [[ "${{ github.event_name }}" == "push" ]]; then # Push触发时使用默认矩阵 MATRIX='{"py_version": ["3.7", "3.10"]}' else # 处理Workflow Dispatch的用户输入 INPUT="${{ github.event.inputs.py_version }}" # 如果输入不是JSON数组格式,自动转为单元素数组 if [[ "$INPUT" != "["* ]]; then MATRIX="{\"py_version\": [\"$INPUT\"]}" else # 直接使用用户输入的JSON数组 MATRIX="{\"py_version\": $INPUT}" fi fi # 将矩阵输出到GitHub Actions环境变量 echo "matrix=$MATRIX" >> "$GITHUB_OUTPUT" # 测试Job:使用动态生成的矩阵 test: needs: generate_matrix runs-on: ubuntu-22.04 strategy: matrix: ${{ fromJson(needs.generate_matrix.outputs.matrix) }} steps: - uses: actions/setup-python@v4 with: python-version: ${{ matrix.py_version }} # 这里可以添加你的测试步骤,比如安装依赖、运行测试等 - run: python --version
关键说明
动态矩阵生成
- 通过
generate_matrixJob预处理输入:Push触发时使用默认的[3.7, 3.10];Workflow Dispatch触发时解析用户输入。 - 自动兼容单值输入(如
3.11)和JSON数组输入(如[3.5, 2.7]),统一转换为矩阵所需的JSON格式。
- 通过
矩阵传递与使用
- 使用
needs关键字让测试Job依赖预处理Job,确保矩阵生成完成后再执行测试。 - 通过
fromJson()函数将预处理输出的字符串转换为GitHub Actions可识别的矩阵对象。
- 使用
输入格式要求
- 单值输入直接填写版本号(如
3.11)。 - 多版本输入需使用有效的JSON数组格式(如
[3.5, 2.7]或["3.5", "2.7"],两种格式均可被解析)。
- 单值输入直接填写版本号(如
内容的提问来源于stack exchange,提问作者Roman Dodin
相关产品推荐
相关产品推荐

