如何用Groovy(Jenkinsfile)按指定格式将文本文件行存入数组?
解决方案
问题说明
现有file.txt文件内容如下:
##---A1--- a1.la a2.la a3.la ##---B1-- b1.la b3.la ##---C1-- c1.la c2.la c3.la c4.la
需要编写可在Jenkinsfile中运行的Groovy脚本,将内容转换为如下结构的数组:
Main = [A1 B1 C1] A1 = [a1.la b1.la c1.la] B1 = [b1.la b3.la] C1 = [c1.la c2.la c3.la c4.la]
Jenkinsfile中的Groovy实现
pipeline { agent any stages { stage('Process File') { steps { script { def filePath = 'file.txt' def groups = [:] def currentGroup = null // 读取文件并解析各个分组 new File(filePath).eachLine { line -> def trimmedLine = line.trim() if (trimmedLine.startsWith('##---')) { // 提取分组名称,清理分隔符 currentGroup = trimmedLine.replaceAll(/##---|[-]+/, '').trim() groups[currentGroup] = [] } else if (currentGroup && trimmedLine) { // 将有效行加入当前分组的列表 groups[currentGroup] << trimmedLine } } // 构造所需的数组结构 def mainArray = groups.keySet().toList() def a1Array = groups.collect { it.value[0] } // 取每个分组的第一个元素 // 按要求格式输出结果 println "Main = [${mainArray.join(' ')}]" println "A1 = [${a1Array.join(' ')}]" groups.each { group, items -> if (group != 'A1') { println "${group} = [${items.join(' ')}]" } } // 若后续步骤需要使用这些数组,可直接引用变量: // mainArray, a1Array, groups.B1, groups.C1 等 } } } } }
脚本逻辑说明
- 文件解析:逐行读取
file.txt,识别以##---开头的分组行,提取分组名称并创建对应的空列表;将分组下的非空行添加到对应列表中。 - 数组构造:
Main数组直接取所有分组名称的集合A1数组遍历每个分组,取每个分组的第一个元素B1和C1数组直接使用对应分组的完整元素列表
- 结果输出:按照指定格式打印数组,也可将变量保留供Jenkins流水线后续步骤调用。
内容的提问来源于stack exchange,提问作者Anjan
相关产品推荐
相关产品推荐

