Liste des fichiers sur l'espace de travail sur un Pipeline Jenkins
Je suis en train de la liste des fichiers dans l'espace de travail dans un Jenkins Pipeline, afin que je puisse l'utiliser pour produire appropriée des tâches parallèles.
Alors que je pourrais simplement utiliser sh ls > files
et de lire ça, je veux File
objets dont je ne peux filtrer davantage à une logique plus complexe. En fait, Files.listFiles(FileFilter)
serait l'idéal.
Cependant, je ne peux pas obtenir la liste des fichiers. Tout d'abord, j'ai dû recourir à un truc bizarre tout simplement de trouver le répertoire de travail en cours de construction:
sh 'pwd > workspace'
workspace = readFile('workspace').trim()
Maintenant, j'appelle cela de récupérer la liste des fichiers:
@NonCPS
def getFiles(String baseDir) {
Arrays.asList(new File(baseDir).listFiles())
}
Et obtenir un NPE sur asList
, ce qui signifie, par ma lecture de la javadoc, qui new File(baseDir)
n'existe pas (ou n'est pas un répertoire).
Je suis marquage il @NonCPS
parce que c'est nécessaire pour groovy fermetures sur le Pipeline, qui j'aimerais vraiment préfèrent utiliser sur java <1.8 syntaxe.
pwd()
pipeline func pour obtenir du répertoire courant.OriginalL'auteur Daniel C. Sobral | 2016-07-31
Vous devez vous connecter pour publier un commentaire.
Pour les personnes handicapées, vous pouvez utiliser
pwd
étape.Comme pour la liste des fichiers dans l'espace de travail principale dir vous pouvez utiliser
findFiles
:pwd
ne fonctionne pas sur les esclaves. Il renvoie à l'espace de travail sur le master.et que dire de findFiles?
findFiles
ne renvoie pas unFile
. Elle renvoie uneFileWrapper
, ce qui est un peu plus limitée. Il pourrait être utile si elle n'a pas un problème de chemin d'accès commepwd
.Êtes-vous essayer de trouver les fichiers qui vous sont générés dans l'étape précédente. Je veux juste mentionner que j'ai eu du succès avec l'aide des constructions parallèles (dans mon cas de test travaux exécutés à partir de pipeline), dans le cadre stash/unstash. Je ne pouvais pas comprendre pourquoi les fichiers que je viens de créé en étaient allés à la prochaine étape où je voulais obtenir leur contenu. Vous ressentez peut-être quelque chose de similaire?
files[0].name
vous donne juste le nom du fichier sans le chemin d'accès. Si vous voulez que le chemin d'accès au fichier que vous avez à convertir:files[0].toString()
(de Sorte que vous pouvez obtenir le contenu du fichier avecreadFile(files[0].toString())
.)OriginalL'auteur Krzysztof Krasoń
Voici un exemple de la façon dont je suis la recherche des fichiers json dans mon projet pour le traitement.
sh script: "ls *.json", returnStdout: true
?OriginalL'auteur vanappears
Une solution qui fonctionne dans tous les cas, sans l'utilisation de JENKINS de la fonction
vous avez raison, j'ai changé les regex
OriginalL'auteur question_maven_com
vous pouvez essayer suivante qui utilise pwd() si vous exécutez le script sur le master.
OriginalL'auteur f-society
Cela a fonctionné pour moi!!
Vous pouvez l'approuver, si vous suivez le lien dans le journal des erreurs.
OriginalL'auteur Litty Philip
Avez-vous regardé dans l'écriture de tous vos fichier logique manipulations comme un script shell, puis en exécutant le script shell avec
sh './runScript.sh'
?Script Shell est très puissant pour les manipulations de fichier. Le script peut également être distribué à chaque esclave pour la parallélisation.
OriginalL'auteur Wimateeka