You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Groovy流水线中正确调用MatrixCombinationsParameterValue过滤矩阵任务

正确调用Matrix任务并过滤ElasticAxis的Groovy流水线语法

你遇到的问题核心是MatrixCombinationsParameterValue的参数字段使用错误,以及可能的配置验证问题。下面给你整理正确的调用语法,以及分支对应标签的优化方案:

一、基础正确调用写法

首先,修正你代码里的参数字段——Matrix Combinations Parameter插件的MatrixCombinationsParameterValue类,在主流版本中是通过value字段传递过滤表达式,而不是filter。正确的调用代码如下:

build job: 'test_matrix', parameters: [
    string(name: 'RndBranch', value: RndBranch),
    string(name: 'BuildNumber', value: PAVersion),
    string(name: 'Auto_Build_Path', value: autoFolder),
    string(name: 'Installer_folder', value: Installer_folder),
    string(name: 'RabbitMQ_Server', value: rabbitMQServer),
    string(name: 'QueName', value: qName),
    [$class: 'MatrixCombinationsParameterValue', name: 'labelFilter', value: 'label=="PA16"']
]

二、为什么之前的写法不生效?

你可以从这几个方向排查验证:

  • 字段名称错误:如果之前写的是filter: 'label=="PA16"',这个字段是不被插件识别的,必须用value。
  • Matrix任务配置验证:确保你的test_matrix任务中,labelFilter这个Matrix组合参数已经正确关联了label ElasticAxis,并且参数是启用状态。
  • 表达式格式:过滤表达式要严格匹配轴名称和值,双引号包裹值的写法是正确的,不要出现语法错误(比如引号不配对)。

三、分支对应标签的动态调用方案

针对你多条分支对应特定标签的场景,我们可以通过分支名称动态映射目标标签,让流水线更灵活:

// 根据当前分支名称映射对应的目标标签
def targetLabel = ''
switch (env.BRANCH_NAME) {
    case 'release/pa16':
        targetLabel = 'PA16'
        break
    case 'release/pa17':
        targetLabel = 'PA17'
        break
    case 'develop':
        targetLabel = 'DEV'
        break
    // 可以继续添加更多分支与标签的映射关系
    default:
        targetLabel = 'DEFAULT' // 分支无匹配时的默认标签
}

// 动态生成过滤表达式并调用Matrix任务
build job: 'test_matrix', parameters: [
    string(name: 'RndBranch', value: RndBranch),
    string(name: 'BuildNumber', value: PAVersion),
    string(name: 'Auto_Build_Path', value: autoFolder),
    string(name: 'Installer_folder', value: Installer_folder),
    string(name: 'RabbitMQ_Server', value: rabbitMQServer),
    string(name: 'QueName', value: qName),
    [$class: 'MatrixCombinationsParameterValue', name: 'labelFilter', value: "label==\"${targetLabel}\""]
]

这里用双引号包裹表达式并通过${targetLabel}插值,注意要转义内部的双引号;你也可以用字符串拼接的方式写表达式:'label=="' + targetLabel + '"',效果是一样的。

额外排查建议

如果按照上述写法仍然不生效,可以做这些验证:

  1. 手动在test_matrix任务中输入label=="PA16"作为labelFilter的值,触发任务看是否能正确过滤,确认任务本身配置没问题。
  2. 查看流水线的日志,检查labelFilter参数是否正确传递给了Matrix任务。
  3. 确认Jenkins流水线的执行账号有足够权限向目标Matrix任务传递参数。

内容的提问来源于stack exchange,提问作者Miri Avraham

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:09:55