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

📅 2026/7/11 12:27:38 👁️ 阅读次数 📝 编程学习
groovy脚本统计jenkins_tag与构建机的映射关系
importjenkins.model.Jenkins// 获取 Jenkins 实例defjenkins=Jenkins.instance// 收集数据:标签 -> 构建机列表deflabelToNodes=[:]jenkins.nodes.each{node->defnodeName=node.name node.assignedLabels.each{label->deflabelName=label.toString()if(labelName==nodeName)return// 跳过节点自身的隐式标签if(!labelToNodes.containsKey(labelName)){labelToNodes[labelName]=[]}labelToNodes[labelName]<<nodeName}}// 按标签名排序defsortedLabels=labelToNodes.keySet().sort()// ============================================================// 第一部分:固定列宽表格(控制台查看)// ============================================================println"\n========== 标签与构建机对应关系(表格) =========="// 可调整的列宽(单位:字符数)intlabelWidth=25intnodesWidth=50intcountWidth=6deftotalWidth=labelWidth+nodesWidth+countWidth+7println"="*totalWidthprintf("| %-${labelWidth}s | %-${nodesWidth}s | %${countWidth}s |\n","标签","构建机列表","数量")println("-"*totalWidth)sortedLabels.each{label->defnodes=labelToNodes[label]defnodeStr=nodes.join(', ')// 截断过长内容(保留尾部 '...')if(nodeStr.length()>nodesWidth){nodeStr=nodeStr.substring(0,nodesWidth-3)+'...'}deflabelDisplay=labelif(labelDisplay.length()>labelWidth){labelDisplay=labelDisplay.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->defnodes=labelToNodes[label]// 将节点列表用逗号分隔,并用双引号包裹整个字段(避免特殊字符)defnodeList=nodes.join(', ')println"\"${label}\",\"${nodeList}\",${nodes.size()}"}println"\n统计完成,共找到${sortedLabels.size()}个标签。"