2016-05-24 4 views
6

Ich versuche Umgebungsvariablen zu verwenden, die außerhalb eines Knotens in einer Jenkins-Datei definiert sind. Ich kann sie in jedem Pipelineschritt in jedem Knoten, aber nicht innerhalb einer Funktion in den Geltungsbereich aufnehmen. Die einzige Lösung, die ich mir jetzt vorstellen kann, ist, sie als Parameter zu übergeben. Aber ich möchte die env-Variablen direkt innerhalb der Funktion referenzieren, damit ich nicht so viele Parameter übergeben muss. Hier ist mein Code. Wie kann ich die Funktion erhalten, um den korrekten Wert von BRANCH_TEST auszugeben?Verwendung von Umgebungsvariablen in einer Groovy-Funktion mit einer Jenkins-Datei

def BRANCH_TEST = "master" 

    node { 
     deploy() 
    } 

    def deploy(){ 
     echo BRANCH_TEST 
    } 

Jenkins Konsolenausgabe:

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

Antwort

13

Lösungen sind

  1. Verwenden @Field Anmerkung

  2. Entfernen def von der Deklaration. Eine Erläuterung zur Verwendung von def. Finden Sie unter Ted's answer.

Lösung 1 (mit @Field)

import groovy.transform.Field 

@Field def BRANCH_TEST = "master" 

    node { 
     deploy() 
    } 

    def deploy(){ 
     echo BRANCH_TEST 
    } 

Lösung 2 (Entfernen def)

BRANCH_TEST = "master" 

    node { 
     deploy() 
    } 

    def deploy(){ 
     echo BRANCH_TEST 
    } 

Erklärung ist hier,

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

auch beantwortet in how-do-i-create-and-access-the-global-variables-in-groovy

+0

Sie müssen doppelte 'import'-Anweisung in der Antwort entfernen. – Rao

Verwandte Themen