如何在Jenkins Pipeline的for循环中获取字符串值?
问题根源与解决方案
核心问题
- input返回值未正确存储:
input步骤的交互式输入参数不会自动存入params或env,而是通过返回值返回给你定义的paramInput变量,原代码中仅定义了这个变量但未留存或使用它。 - 循环变量不匹配:你定义了
loopCount = No_Of_TEST.toInteger(),但循环条件用的是i <= TEST,这里应该用loopCount,否则循环逻辑本身就存在错误。 - 参数获取方式错误:
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),值是用户输入的内容。- 用全局Map
allControlIPs存储所有输入,避免循环内变量作用域导致的后续无法访问问题。 - 如果要存入
env,必须使用env["动态键名"]的方式赋值,不能用.语法直接调用动态生成的键名。
内容的提问来源于stack exchange,提问作者Nirav
相关产品推荐
相关产品推荐

