2017-01-12 4 views
0

Ich versuche, eine Pipeline Jenkins Job, die Schleife durch den Unterordner eines bestimmten Verzeichnisses und etwas zu starten. Das Problem besteht darin, auf das Dateisystem zuzugreifen. Aus irgendeinem Grund scheint es das Dateisystem überhaupt nicht zu lesen, weder seinen eigenen Arbeitsbereich.So lesen Sie Unterordner in Jinkins-Pipeline

Dies ist das Snippet ich

node ('label') { 
    workspacePath = '/opt/installersWS' 
    ws(workspacePath){ 
     stage ("test"){ 
      ...some stuff... 
      runtimeBuildDir = new File(workspacePath + "/components") 
      echo runtimeBuildDir.getPath() 
      if (runtimeBuildDir.exists()){ 
       echo "search for subfolders" 
      } else { 
       echo "main folder not existing" 
      } 

     } 
    } 
} 

Der Ordner natürlich auf dem Server vorhanden ist verwenden, aber der Lauf immer mit dem zweiten Echo zurück.

UPDATE: ich feststellen, dass alle gradle/java Anweisung auf diese Weise gegeben ist nicht den Knoten Targeting aber auf dem Master ausgeführt werden. Deshalb habe ich die Verzeichnisse nicht gefunden. Also habe ich völlig falsch verstanden, wie die Pipeline funktioniert.

Sagte, dass .. eine Idee, wie kann ich das abrufen? Gibt es eine Möglichkeit, eine Gravel-Eigenschaft aus dem Shell-Schritt zum Beispiel zu setzen?

Danke, Michele

Antwort

0

Dies ist die Art, wie ich es gelöst, eine Shell ausgeführt wird, der die Ausgabe

zurück
def subfolders = sh(returnStdout: true, script: 'ls -d RuntimeBuild/*').trim().split(System.getProperty("line.separator")) 

Dann konnte ich die Liste mit den Namen der Verzeichnisse cicle und manipulieren Sie.

1

Unten löste mein Problem. Es könnte jemandem helfen, der nach dem gleichen sucht. Unterordner können zur Liste hinzugefügt werden, die Funktion verwendet, die die Liste des Verzeichnisses in der Pipeline wie folgt zurückgibt.

@NonCPS 
def readDir() 
{ 
    def dirsl = [] 
    new File("${workspace}").eachDir() 
    { 
     dirs -> println dirs.getName() 
     if (!dirs.getName().startsWith('.')) { 
      dirsl.add(dirs.getName()) 
     } 
    } 
    dirsl 
} 

Dann in Ihrem Pipeline-Skript, rufen Sie die Funktion wie unten und tun, was auch immer erforderlich ist.

stage ('Build'){ 

    dirsl = readDir() 
    def size = dirsl.size() 
    print size 
    for (int i = 0; i < size; i++) { 
     "Do whatever appropriate" 
    } 
}