groovy脚本统计jenkins_tag与构建机的映射关系

groovy脚本统计jenkins_tag与构建机的映射关系
importjenkins.model.Jenkins// 获取 Jenkins 实例defjenkinsJenkins.instance// 收集数据标签 - 构建机列表deflabelToNodes[:]jenkins.nodes.each{node-defnodeNamenode.name node.assignedLabels.each{label-deflabelNamelabel.toString()if(labelNamenodeName)return// 跳过节点自身的隐式标签if(!labelToNodes.containsKey(labelName)){labelToNodes[labelName][]}labelToNodes[labelName]nodeName}}// 按标签名排序defsortedLabelslabelToNodes.keySet().sort()// // 第一部分固定列宽表格控制台查看// println\n 标签与构建机对应关系表格 // 可调整的列宽单位字符数intlabelWidth25intnodesWidth50intcountWidth6deftotalWidthlabelWidthnodesWidthcountWidth7println*totalWidthprintf(| %-${labelWidth}s | %-${nodesWidth}s | %${countWidth}s |\n,标签,构建机列表,数量)println(-*totalWidth)sortedLabels.each{label-defnodeslabelToNodes[label]defnodeStrnodes.join(, )// 截断过长内容保留尾部 ...if(nodeStr.length()nodesWidth){nodeStrnodeStr.substring(0,nodesWidth-3)...}deflabelDisplaylabelif(labelDisplay.length()labelWidth){labelDisplaylabelDisplay.substring(0,labelWidth-3)...}printf(| %-${labelWidth}s | %-${nodesWidth}s | %${countWidth}d |\n,labelDisplay,nodeStr,nodes.size())}println(*totalWidth)// // 第二部分CSV 格式复制到 Excel 分列// println\n 标签与构建机对应关系CSV格式 println标签,构建机列表,数量sortedLabels.each{label-defnodeslabelToNodes[label]// 将节点列表用逗号分隔并用双引号包裹整个字段避免特殊字符defnodeListnodes.join(, )println\${label}\,\${nodeList}\,${nodes.size()}}println\n统计完成共找到${sortedLabels.size()}个标签。