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?

32
demandé sur Joerg S 2016-04-29 12:01:40

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.

13
répondu Jan Fabry 2017-03-31 09:47:43

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 
}
39
répondu Aleks 2018-07-18 12:50:43

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!!

-1
répondu anuj0901 2018-09-19 21:00:09

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.

-5
répondu Slack Flag 2017-03-01 01:52:19