96 votes

Obtenir le chemin absolu du répertoire d'espace de travail dans le plugin Jenkins Pipeline

Je suis actuellement en train de faire une évaluation sur le Jenkins Pipeline plugin (anciennement connu sous le nom de Flux de travail plugin). La lecture de la documentation, j'ai trouvé que j'ai actuellement ne peut pas retriev le chemin à l'aide de l'espace de travail env.WORKSPACE:

Les variables suivantes sont actuellement indisponibles à l'intérieur d'un flux de travail script:

NODE_LABELS

Espace de travail

SCM des variables spécifiques tels que SVN_REVISION

Est-il une autre manière d'obtenir le chemin absolu de l'espace de travail actuel? J'ai besoin de cette course d'un test qui à son tour est un certain nombre de paramètres (chemin absolu vers un fichier exécutable). J'ai déjà essayé à l'aide d' new File("").absolutePath() à l'intérieur d'un @NonCPS section mais il semble que le non-CPS les choses deviennent toujours exécutée sur le maître.

Quelqu'un a une idée comment faire pour obtenir ce chemin sans exécutant un script batch qui stocke le chemin d'accès dans un fichier qui plus tard peut être lu à nouveau?

80voto

Jan Fabry Points 3977

Depuis la version 2.5 du plug-in Pipeline Nodes and Process (composant du plug-in Pipeline, installé par défaut), la variable d'environnement WORKSPACE est à nouveau disponible. Cette version étant sortie le 23/09/2016, elle devrait donc être disponible sur toutes les instances récentes de Jenkins.

61voto

Aleks Points 679

Remarque : cette solution ne fonctionne que si les esclaves ont la même structure de répertoires que le maître. pwd() renverra le répertoire de l'espace de travail sur le maître en raison de JENKINS-33511 .

J'avais l'habitude de le faire en utilisant les fonctionnalités pwd() du plugin pipeline. Donc, si vous avez besoin d’un espace de travail sur slave, vous pouvez le faire 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 
}
 

22voto

anuj0901 Points 77

La variable d'environnement "WORKSPACE" fonctionne pour la dernière version de Pipeline Jenkins. Vous pouvez utiliser ceci dans votre fichier Jenkins: "$ {env.WORKSPACE}"

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 t'as aidé!!

-5voto

Slack Flag Points 124

Lorsque vous utilisez un script, le concept d'espace de travail n'a pas de sens. Votre meilleur choix est d'utiliser readFile pour lire le fichier dans une chaîne, puis de la transmettre à votre bibliothèque pour traitement. La méthode pwd () ne peut pas vous aider car elle s'exécute sur le maître et vos fichiers sont stockés sur le nœud.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X