2016-04-29 13 views
25

Attualmente sto facendo una valutazione del plug-in Jenkins Pipeline (noto come plug-in Workflow). Leggendo la documentazione ho scoperto che io al momento non posso retriev il percorso di lavoro utilizzando env.WORKSPACE:Ottieni il percorso assoluto per la directory dell'area di lavoro nel plug-in Jenkins Pipeline

Le seguenti variabili sono attualmente disponibili all'interno di uno script di workflow:

NODE_LABELS

WORKSPACE

Variabili specifiche dello SCM come SVN_REVISION

Esiste un altro modo per ottenere il percorso assoluto per l'area di lavoro corrente? Ho bisogno di eseguire alcuni test che a loro volta ottengono alcuni parametri (percorso assoluto per alcuni file eseguibili). Ho già provato a usare new File("").absolutePath() all'interno di una sezione @NonCPS ma sembra che il materiale non CPS venga sempre eseguito sul master.

Qualcuno ha la minima idea di come ottenere questo percorso senza eseguendo uno script batch che memorizza il percorso in un file che in seguito può essere letto di nuovo?

risposta

8

Dalla versione 2.5 di Pipeline Nodes and Processes Plugin (un componente del plug-in Pipeline, installato per impostazione predefinita), la variabile di ambiente WORKSPACE è nuovamente disponibile. Questa versione è stata rilasciata il 23-09-2016, quindi dovrebbe essere disponibile su tutte le istanze di Jenkins aggiornate.

28

Nota: questa soluzione funziona solo se gli slave hanno la stessa struttura di directory del master. pwd() restituirà la directory dello spazio di lavoro sul master a causa di JENKINS-33511.

L'ho usato utilizzando la funzionalità pwd() del plug-in della pipeline. Quindi, se avete bisogno di ottenere uno spazio di lavoro sullo slave, si può fare smth come questo:

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 
} 

spero che sarà di aiuto.

+0

Accidenti. Probabilmente hanno bisogno di occhiali. Assolutamente mancato che ci sia pwd() disponibile. Era esattamente quello che stavo cercando. Grazie! –

+0

E, tuttavia, secondo la discussione in [questo ticket] (https://issues.jenkins-ci.org/browse/JENKINS-33511), 'pwd()' restituirà la directory di lavoro del master, non il nodo su cui ti trovi. –

+0

Un fatto che ho appena confermato da solo. 'pwd()' non lavorerà su slave, a meno che non abbiano la stessa struttura di directory del master. –

0

Quando si utilizza uno script, il concetto di spazio di lavoro non ha senso. La soluzione migliore è usare readFile per leggere il file in una stringa, quindi passare quella stringa alla libreria per l'elaborazione. Il metodo pwd() non può aiutarti perché viene eseguito sul master e i tuoi file sono memorizzati sul nodo.

Problemi correlati