1

我想从我的 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”(如果 dir 为空)或“4096”的大小为 28mb 的 dir。

我尝试使用 File

  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

因为主节点是 Linux 服务器,而某些节点是 Windows 服务器,这会创建错误的文件位置。

是否有解决方案以 mb 为所有节点显示正确的 dir 大小?

4

1 回答 1

1

解决方案:

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
}
于 2017-10-16T13:39:27.050 回答