Jenkins scripted pipeline迭代列表时echo输出多余字符如何解决
问题原因
- 你将
List类型的对象直接赋值给了env.myJobs,Jenkins中所有env下的变量都会被自动转换为字符串类型,原生List执行toString()后会生成[元素1, 元素2]格式的字符串,自带前后方括号、元素之间自带,分隔符 - 你后续对已经转为字符串的内容调用
tokenize(',')拆分,得到的元素自然会携带残留的方括号和多余前导空格
解决方案
方案1:不需要跨节点/跨阶段传递列表时,直接用普通变量存储
不要把列表放到env中,直接遍历原生List即可,无需额外拆分处理:
node { // 用普通变量存储列表,不走env转换 def myJobs = [ "abc", "def"] stage('Regression') { echo "Test" build_jobs(myJobs) } } def build_jobs(list) { // 直接遍历原生列表 list.each { item -> echo "${item}" } }
方案2:确实需要存入env跨场景使用时,先转成纯分隔字符串
存到env之前先把列表拼接为无括号的逗号分隔字符串,拆分后补一下trim操作去掉空格即可:
node { // 转成纯逗号分隔字符串再存入env env.myJobs = [ "abc", "def"].join(',') stage('Regression') { echo "Test" build_jobs(env.myJobs) } } @NonCPS def build_jobs(jobStr) { jobStr.tokenize(',').each { item -> // 去掉前后多余空白 echo item.trim() } }
内容的提问来源于stack exchange,提问作者Fisher
相关产品推荐
相关产品推荐

