2016-05-24 18 views
6

Próbuję użyć zmiennych środowiskowych zdefiniowanych poza dowolnym węzłem w pliku Jenkinsfile. Mogę wprowadzić je w zasięgu na dowolnym etapie potoku w dowolnym węźle, ale nie wewnątrz funkcji. Jedynym rozwiązaniem, jakie mogę teraz rozważyć, jest przekazanie ich jako parametrów. Chciałbym jednak odnieść się do zmiennych env bezpośrednio w funkcji, więc nie muszę przekazywać tak wielu parametrów. Oto mój kod. Jak mogę uzyskać funkcję wyprowadzania poprawnej wartości BRANCH_TEST?Jak używać zmiennych środowiskowych w funkcji groovy przy użyciu Jenkinsfile

def BRANCH_TEST = "master" 

    node { 
     deploy() 
    } 

    def deploy(){ 
     echo BRANCH_TEST 
    } 

Jenkins wyjście konsoli:

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

Odpowiedz

13

Rozwiązania są

  1. Zastosowanie @Field adnotacja

  2. Usuń def z oświadczeniem. Zobacz Ted's answer, aby uzyskać wyjaśnienie korzystania z def.

Roztwór 1 (używając @Field)

import groovy.transform.Field 

@Field def BRANCH_TEST = "master" 

    node { 
     deploy() 
    } 

    def deploy(){ 
     echo BRANCH_TEST 
    } 

Roztwór 2 (usuwanie def)

BRANCH_TEST = "master" 

    node { 
     deploy() 
    } 

    def deploy(){ 
     echo BRANCH_TEST 
    } 

wyjaśnienia jest tu

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

odpowiedziało także w how-do-i-create-and-access-the-global-variables-in-groovy

+0

Musisz usunąć zduplikowane wyrażenie 'import' w odpowiedzi. – Rao