web-dev-qa-db-fra.com

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

Je suis en train de faire une évaluation du plugin Jenkins Pipeline (anciennement connu sous le nom de plugin Workflow). En lisant la documentation, j'ai découvert que je ne peux actuellement pas récupérer le chemin de l'espace de travail avec env.WORKSPACE:

Les variables suivantes sont actuellement indisponibles dans un script de flux de travail:

NODE_LABELS

ESPACE DE TRAVAIL

Variables spécifiques à SCM telles que SVN_REVISION

Existe-t-il un autre moyen d'obtenir le chemin absolu vers l'espace de travail actuel? J'ai besoin de ce test pour obtenir un paramètre (chemin absolu vers un fichier exécutable). J'ai déjà essayé d'utiliser new File("").absolutePath() à l'intérieur d'une section @NonCPS mais j'ai l'impression que les éléments non-CPS sont toujours exécutés sur le maître.

Quelqu'un sait-il comment obtenir ce chemin sans exécute un script batch qui enregistre le chemin dans un fichier qui pourra être lu ultérieurement?

48
Joerg S

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

28
Jan Fabry

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 pwd() la fonctionnalité 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 
}
46
Aleks

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

13
anuj0901