Liste der Dateien auf der Arbeitsfläche, die auf einem Jenkins-Pipeline
Ich versuche, die Liste der Dateien im Arbeitsbereich in einem Jenkins-Pipeline, so dass ich verwenden können, zu produzieren, entsprechende parallele Aufgaben.
Weile konnte ich einfach verwenden sh ls > files
Lesen, ich will File
Objekte, die ich filtern kann weiter mit komplexer Logik. In der Tat Files.listFiles(FileFilter)
wäre ideal.
Jedoch kann ich nicht die Liste der Dateien an. Ich hatte zunächst zu greifen, um einige seltsame Sachen zu finden einfach heraus, das aktuelle Arbeitsverzeichnis für das bauen:
sh 'pwd > workspace'
workspace = readFile('workspace').trim()
Nun nenne ich diese abrufen die Liste der Dateien:
@NonCPS
def getFiles(String baseDir) {
Arrays.asList(new File(baseDir).listFiles())
}
Und bekomme eine NPE auf asList
, was bedeutet, durch mein Lesen der javadoc, dass new File(baseDir)
existiert nicht (oder ist kein Verzeichnis).
Ich bin tagging es @NonCPS
denn, es ist erforderlich für groovy-closures auf Pipeline, die würde ich wirklich lieber über die volle java <1.8 syntax.
- auch gibt es
pwd()
pipeline func um aktuelle dir.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für pwd können Sie
pwd
Schritt.Als für die Liste der Dateien im Haupt-workspace dir könnten Sie
findFiles
:pwd
funktioniert nicht auf den slaves. Es gibt den Arbeitsbereich auf master.findFiles
nicht wieder eineFile
. Es gibt eineFileWrapper
, die eher begrenzt. Es könnte nützlich sein, wenn Sie nicht über ein Pfad-problem wiepwd
.findFiles
zurück nicht einen vollständigen Pfad zu der Datei, also bin ich immer noch stecken.findFiles
gibt aber können Sie nicht verwenden Sie es zusätzlich mitpwd
(sogar Ihre benutzerdefinierte Implementierung) zu finden, die den vollständigen Pfad der Datei(en) ?files[0].name
enthält nur den Dateinamen ohne Pfad. Wenn Sie möchten, dass der Pfad zu der Datei, die Sie konvertieren müssen:files[0].toString()
(So können Sie den Inhalt der Datei mitreadFile(files[0].toString())
.)Hier ist ein Beispiel, wie ich finde json-Dateien in meinem Projekt für die Verarbeitung.
sh script: "ls *.json", returnStdout: true
?Eine Lösung, die funktioniert in allen Fällen ohne den Einsatz von JENKINS-Funktion
können Sie Folgendes versuchen verwendet pwd() wenn Sie mit dem Skript auf master.
Dieser arbeitete für mich!!
Dies ist die einfachste & unkomplizierte groovy-Lösung, die für mich gearbeitet hat.
Haben Sie sah in das schreiben für alle Ihre Datei-Logik Manipulationen als ein shell-Skript, und dann läuft das shell-Skript mit
sh './runScript.sh'
?Shell-scripting ist sehr mächtig für Datei-Manipulationen. Das Skript kann auch verteilt werden an jeden slave, der für die Parallelisierung.