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

如何在Jenkins Pipeline的for循环中获取字符串值?

问题根源与解决方案

核心问题

  1. input返回值未正确存储:input步骤的交互式输入参数不会自动存入params或env,而是通过返回值返回给你定义的paramInput变量,原代码中仅定义了这个变量但未留存或使用它。
  2. 循环变量不匹配:你定义了loopCount = No_Of_TEST.toInteger(),但循环条件用的是i <= TEST,这里应该用loopCount,否则循环逻辑本身就存在错误。
  3. 参数获取方式错误:params仅包含流水线启动时的预设参数,不会包含input步骤动态生成的参数;直接用params["Control_IP_${i}"]自然取不到值。

修正后的代码示例

def loopCount = No_Of_TEST.toInteger()
// 定义全局Map存储所有输入的参数
def allControlIPs = [:]

for (int i = 1; i <= loopCount; i++) {
    def paramInput = input(
        id: "paramInput-${i}",
        message: "Enter TEST${i} Value",
        parameters: [
            string(name: "Control_IP_${i}", defaultValue: '10.0.0.0', description: "Control IP")
        ]
    )
    // 从input返回的paramInput中取出当前IP,存入Map
    def currentIP = paramInput["Control_IP_${i}"]
    allControlIPs["Control_IP_${i}"] = currentIP
    
    // 直接打印当前输入的IP
    echo "当前输入的TEST${i} Control IP:${currentIP}"
    // 存入env的方式(动态键名需用方括号语法)
    env["Control_IP_${i}"] = currentIP
    echo "存入env后的TEST${i} Control IP:${env["Control_IP_${i}"]}"
}

// 循环结束后遍历Map使用所有参数
allControlIPs.each { key, value ->
    echo "${key} = ${value}"
}

关键说明

  • input步骤的返回值paramInput是一个Map,键是你定义的参数名(比如Control_IP_1),值是用户输入的内容。
  • 用全局MapallControlIPs存储所有输入,避免循环内变量作用域导致的后续无法访问问题。
  • 如果要存入env,必须使用env["动态键名"]的方式赋值,不能用.语法直接调用动态生成的键名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 02:25:08