2016-05-24 18 views
6

Sto provando a utilizzare le variabili d'ambiente definite all'esterno di qualsiasi nodo in un Jenkinsfile. Posso portarli in ambito su qualsiasi passaggio della pipeline in qualsiasi nodo ma non all'interno di una funzione. L'unica soluzione a cui riesco a pensare per ora è passarli come parametri. Ma vorrei fare riferimento alle variabili env direttamente all'interno della funzione, quindi non devo passare così tanti parametri. Ecco il mio codice. Come posso ottenere che la funzione emetta il valore corretto di BRANCH_TEST?Come utilizzare le variabili d'ambiente in una funzione groovy utilizzando un Jenkinsfile

def BRANCH_TEST = "master" 

    node { 
     deploy() 
    } 

    def deploy(){ 
     echo BRANCH_TEST 
    } 

Jenkins output della console:

[Pipeline] 
[Pipeline] echo 
null 
[Pipeline] } 
[Pipeline] // node 
[Pipeline] End of Pipeline 
Finished: SUCCESS 

risposta

13

soluzioni sono

  1. Usa @Field annotazione

  2. Rimuovere def dalla dichiarazione. Vedi Ted's answer per una spiegazione sull'uso di def.

Soluzione 1 (utilizzando @Field)

import groovy.transform.Field 

@Field def BRANCH_TEST = "master" 

    node { 
     deploy() 
    } 

    def deploy(){ 
     echo BRANCH_TEST 
    } 

Soluzione 2 (rimozione DEF)

BRANCH_TEST = "master" 

    node { 
     deploy() 
    } 

    def deploy(){ 
     echo BRANCH_TEST 
    } 

spiegazione è qui,

https://groups.google.com/d/msg/jenkinsci-users/P7VMQQuMdsY/bHfBDSn9GgAJ

risposto anche ahow-do-i-create-and-access-the-global-variables-in-groovy

+0

È necessario rimuovere la dichiarazione duplicata 'import' nella risposta. – Rao