Jenkins中CascadeChoiceParameter显示[object,Object]而非字符串问题
问题分析
你的Groovy代码存在两个关键问题导致releaseString显示异常:
- 语法错误:你把
releaseString的字符串赋值和后续的列表定义写在了同一行,导致releaseString实际被赋值为字符串索引数组的结果,而非预期的分支路径字符串。 - 字符串格式错误:你在
releaseString中多余插入了/${now}/,这会把LocalDateTime.now()的完整toString结果(如2025-03-15T14:30:00)插入到路径中,不仅不符合预期格式,还会引发后续类型混乱。
另外,代码中缺少必要的类导入,可能导致TextStyle和Locale无法正常识别。
修正后的Groovy代码
// 导入必要的类 import java.time.LocalDateTime import java.time.format.TextStyle import java.util.Locale def now = LocalDateTime.now() def monthName = now.month.getDisplayName(TextStyle.FULL, Locale.ENGLISH).toLowerCase() // 修正路径格式,移除多余的${now}部分 def releaseString = "saas/${now.year}/${monthName}/main" // 单独定义要置顶的元素列表 def topEntries = ['saas/master', releaseString] topEntries.each { entry -> // 先判断元素是否存在,避免移除不存在的元素报错 if (choices.contains(entry)) { choices.remove(entry) choices.add(0, entry) } } return choices
关键修正点说明
- 拆分代码逻辑:将
releaseString的定义与列表遍历操作分开,确保变量被正确赋值为字符串类型。 - 修正路径格式:按照你预期的
saas/2025/march/main格式,只保留年份和月份名称,移除多余的完整时间戳。 - 添加类导入:明确导入
LocalDateTime、TextStyle和Locale,避免Jenkins脚本环境中出现类找不到的问题。 - 增加存在性判断:在移除元素前先检查是否存在,防止因元素不在choices列表中引发异常。
内容的提问来源于stack exchange,提问作者Svavelsyra
相关产品推荐
相关产品推荐

