通过脚本从 Jenkinsnodes 获取工作空间目录的大小

Get size of workspacedirectories from Jenkinsnodes via Script

我想从我的 Jenkinsnodes 中打印出目录的大小

我的脚本:

import hudson.node_monitors.*
import hudson.slaves.*
import Jenkins.*

jenkins = Jenkins.instance

for (slave in jenkins.nodes) {
  wsRoot = slave.getWorkspaceRoot()
  println( "Nodename:      " + slave.getNodeName() )

  for (dir in wsRoot.list()) {

    println("---------------------------------------------------------")
    println("   dirname:  " + dir )
    println("   dirspace:  " + dir.length()   )

  }

}

但是对于这个脚本,我得到的大小为“0”(如果目录为空)或“4096”(对于 28mb 的目录)。

我尝试对文件进行同样的操作

  for (dir in wsRoot.list()) {
    println("-------------------------------------------------------")
    println("   dirname:      " + dir )
    File DirFiles = new File(dir.toString())
    def sampleDirSize = DirFiles.directorySize()
    println("   DirSpace:     " + sampleDirSize   ) 
  }

但是我得到了错误:

java.io.FileNotFoundException: /home/jenkins/C:\Jenkins-Slave\jars\workspace\Testprojekt

因为 master 是 Linuxserver 而一些节点是 Windowsservers,这会创建错误的文件位置。

是否有解决方案可以显示所有节点的正确目录大小(以 mb 为单位)?

解法:

import hudson.node_monitors.*
import hudson.slaves.*
import Jenkins.*

nByte = 0
nByteDir = 0

jenkins = Jenkins.instance

for (slave in jenkins.nodes) {
  wsRoot = slave.getWorkspaceRoot()
  println( "Nodename: " + slave.getNodeName() )

  for (dir in wsRoot.list()) {
    nByteDir = 0
    println("=====================================================================")
    println("   dirname:   " + dir )

    showFiles( dir )

    println("   Byte Dir:  " + nByteDir )
  }

  println("=====================================================================")
  println("Byte Total: " + nByte )
  println("#####################################################################")
}


def showFiles( dir ) {
    for ( files in dir.list() ){
        if( files.isDirectory()   ) {
            showFiles( files );
        } else {
            ByteCounter( files.length() )
        }
    }
}

def ByteCounter ( c )
{
  nByte = nByte + c
  nByteDir = nByteDir + c
}