2016-05-24 2 views
6

Я пытаюсь использовать переменные среды, определенные вне любого узла в файле Jenkins. Я могу привести их в область действия на любом этапе конвейера в любом узле, но не внутри функции. Единственное решение, о котором я могу сейчас думать, это передать их в качестве параметров. Но я хотел бы ссылаться на переменные env непосредственно внутри функции, поэтому мне не нужно передавать так много параметров. Вот мой код. Как я могу получить функцию для вывода правильного значения BRANCH_TEST?Как использовать переменные окружения в функции groovy с использованием Jenkinsfile

def BRANCH_TEST = "master" 

    node { 
     deploy() 
    } 

    def deploy(){ 
     echo BRANCH_TEST 
    } 

Дженкинс консольный вывод:

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

ответ

13

Решения

  1. Использование @Field аннотацию

  2. Удалить Защиту от объявления. См. Ted's answer для получения пояснения по использованию def.

Решение 1 (используя @Field)

import groovy.transform.Field 

@Field def BRANCH_TEST = "master" 

    node { 
     deploy() 
    } 

    def deploy(){ 
     echo BRANCH_TEST 
    } 

Решение 2 (удаление четкости)

BRANCH_TEST = "master" 

    node { 
     deploy() 
    } 

    def deploy(){ 
     echo BRANCH_TEST 
    } 

Объяснение здесь,

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

ответил также вhow-do-i-create-and-access-the-global-variables-in-groovy

+0

Вам нужно удалить в ответ дублирующее выражение 'import'. – Rao

Смежные вопросы