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

如何在Jenkins buildWithParameters调用中指定多个Node节点参数值

可行方案(和Web UI行为完全一致)

你之前传参失败的核心原因是:Jenkins处理GET请求的URL参数时,不会将同名重复参数解析为多选参数需要的数组格式,反而会因为参数类型不匹配返回500错误;而逗号、空格分隔的单字符串会被直接识别为单个节点名,自然匹配不到对应节点。

和Jenkins Web UI多选节点触发构建完全一致的传参方式,是改用POST请求提交application/x-www-form-urlencoded格式的表单参数,重复传入同名的节点参数即可,curl示例如下:

curl -X POST 'https://webhook:examplepassword@jenkins.example.com/job/build-sideboard-plugin/buildWithParameters?token=exampletoken' \
--data-urlencode 'GIT_REPO=example/repo' \
--data-urlencode 'YUM_REPO=example' \
--data-urlencode 'BUILDSERVER=sideboard.build.dev.xr' \
--data-urlencode 'BUILDSERVER=sideboard.rocky8.build.dev.xr'

这个方案不需要修改现有Jenkins任务配置,不需要切换Pipeline,也不需要发起多次请求,只是把参数从URL拼参改成了POST表单提交,改造成本极低。


受限场景备选方案(必须用GET请求时用)

如果你的现有webhook逻辑完全不支持发送POST请求,可以用一个低侵入的配置改法实现兼容:

  1. 在任务的参数配置里新增一个普通字符串参数,命名为BUILDSERVER_LIST,不需要勾选其他选项
  2. 在任务的构建步骤最顶部,新增一个「Execute system Groovy script」步骤,填入以下脚本:
    if (build.buildVariableResolver.resolve("BUILDSERVER_LIST")) {
        def targetNodes = build.buildVariableResolver.resolve("BUILDSERVER_LIST").split(",")
        def paramList = new ArrayList<StringParameterValue>()
        // 保留所有原有传入参数
        build.getBuildVariables().each { key, val ->
            if (key != "BUILDSERVER" && key != "BUILDSERVER_LIST") {
                paramList.add(new StringParameterValue(key, val))
            }
        }
        // 拆分逗号分隔的节点列表,组装为多选BUILDSERVER参数
        targetNodes.each { nodeName ->
            paramList.add(new StringParameterValue("BUILDSERVER", nodeName.trim()))
        }
        build.replaceAction(new ParametersAction(paramList))
    }
    
  3. 之后就可以直接在GET请求里用逗号分隔传入节点列表,不需要改请求方法:
    curl -vvv 'https://webhook:examplepassword@jenkins.example.com/job/build-sideboard-plugin/buildWithParameters?token=exampletoken&GIT_REPO=example/repo&YUM_REPO=example&BUILDSERVER_LIST=sideboard.build.dev.xr,sideboard.rocky8.build.dev.xr'
    

注意事项

  • 用POST方式传参时,不要把业务参数拼在URL里,全部放在--data-urlencode参数中提交,避免特殊字符URL编码异常导致参数解析失败
  • 提前确认任务里的Node参数已经开启「允许多选」开关,否则即使传入多值也只会识别第一个
  • Groovy脚本方案需要Jenkins管理员开放对应脚本执行权限,无管理员权限时优先使用POST传参方案

内容的提问来源于stack exchange,提问作者Eli Courtwright

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 21:09:18