Obtenir absolute path to workspace directory dans Jenkins Pipeline plugin
je suis en train de faire une évaluation sur le plugin de Pipeline Jenkins (anciennement connu sous le nom de plugin de flux de travail).
En lisant la documentation, j'ai découvert que je ne pouvais pas retrouver le chemin de l'espace de travail en utilisant
env.WORKSPACE
:
les variables suivantes ne sont actuellement pas disponibles dans un script de flux de travail:
NODE_LABELS
WORKSPACE
variables spécifiques à la SCM telles que SVN_REVISION
Est-il un autre manière d'obtenir le chemin absolu de l'espace de travail actuel? J'ai besoin de cela pour exécuter un test qui à son tour obtient quelques paramètres (chemin absolu vers un fichier exécutable).
J'ai déjà essayé à l'aide de new File("").absolutePath()
dans un @NonCPS
mais on dirait que les trucs non-CPS sont toujours exécutés sur le master.
Quelqu'un a-t-il une idée de comment obtenir ce chemin sans lancer un script de traitement par lots qui stocke le chemin dans un fichier qui plus tard peut être lu à nouveau?
4 réponses
depuis la version 2.5 du noeuds Pipeline et processus Plugin (un composant du plugin Pipeline, installé par défaut), le WORKSPACE
variable d'environnement est de nouveau disponible. Cette version a été publiée le 2016-09-23, donc elle devrait être disponible sur toutes les instances Jenkins à jour.
Remarque:: cette solution ne fonctionne que si les esclaves ont la même structure de répertoire que le maître. pwd()
renvoie le répertoire de l'espace de travail sur le master en raison de JENKINS-33511.
j'ai l'habitude de le faire à l'aide de pwd()
fonctionnalité du plugin pipeline. Ainsi, si vous avez besoin d'obtenir un espace de travail sur slave, vous pouvez faire smth comme ceci:
node('label'){
//now you are on slave labeled with 'label'
def workspace = pwd()
//${workspace} will now contain an absolute path to job workspace on slave
}
la variable d'environnement" WORKSPACE " fonctionne pour la dernière version du Pipeline Jenkins. Vous pouvez l'utiliser dans votre fichier Jenkins: "${env.Espace de travail}"
Exemple d'utilisation ci-dessous:
def files = findFiles glob: '**/reports/*.json'
for (def i=0; i<files.length; i++) {
jsonFilePath = "${files[i].path}"
jsonPath = "${env.WORKSPACE}" + "/" + jsonFilePath
echo jsonPath
j'espère que ça aide!!
lorsque vous utilisez un script, le concept d'espace de travail n'a pas de sens. Votre meilleur pari est d'utiliser readFile pour lire le fichier dans une chaîne, puis passer cette chaîne à votre bibliothèque pour le traitement. La méthode pwd () ne peut pas vous aider car elle exécute sur le maître, et vos fichiers sont stockés sur le noeud.