GitHub Workflow动态矩阵如何合并手动输入值与预定义值
问题原因
- GitHub Actions的
strategy.matrix要求所有维度参数必须为数组类型,你直接将手动触发时输入的单个字符串传入,类型不匹配导致报错。 - tag推送触发时
github.event.inputs为空,直接读取该变量无法生成合法的矩阵配置。
正确实现配置
name: Build on: push: tags: - "*" workflow_dispatch: inputs: product: description: "Product" default: "yellow" limit: description: "Limit" default: "50" jobs: build: runs-on: ubuntu-latest strategy: matrix: product: ${{ github.event_name == 'push' && fromJSON('["yellow", "green", "black"]') || fromJSON(format('["{0}"]', github.event.inputs.product)) }} limits: ${{ github.event_name == 'push' && fromJSON('[10, 20, 50, 100]') || fromJSON(format('[{0}]', github.event.inputs.limit)) }} steps: - uses: actions/checkout@v2 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # 其余原有步骤保持不变 ...
逻辑说明
- 用
github.event_name判断触发来源:- 当触发事件为
push(tag推送场景),直接解析预定义的全量数组作为矩阵维度值,执行全量构建 - 当触发事件为
workflow_dispatch(手动触发场景),通过format函数将输入的单个值拼接为数组格式的字符串,再通过fromJSON转换为合法数组,满足matrix的类型要求,仅构建指定配置的产物
- 当触发事件为
- limits维度手动传入时没有加引号,会自动解析为数字类型,符合原有逻辑的参数要求
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

