2016-06-27 2 views
4

Git Plugin установлен (по умолчанию) в моих Jenkins, но я не могу получить переменные env, которые должны быть переданы плагином Git. Я ищу:Невозможно прочитать переменные Git Environment Jenkins с использованием Groovy Jenkinsfile

GIT_COMMIT 
GIT_BRANCH 
GIT_PREVIOUS_COMMIT 
GIT_PREVIOUS_SUCCESSFUL_COMMIT 
GIT_URL 

и т.д. Я использую пункт Pipeline работы, который, указывая на репо Github с Jenkinsfile следующим кодом

stage 'PushToProd' 
node { 
    git url: "https://github.com/username/fakeurl.git" 
    echo "Starting PushToProd" 
    sh 'printenv' 
    sh 'env' 
    sh 'echo $BRANCH_NAME' 
    sh 'echo $GIT_COMMIT' 
} 

Я получаю много среды переменные, когда я использую env или printenv, а не только плагины Github.
Любые советы о том, как я могу получить переменные env Git, переданные на задание?

Обновление: Я могу легко получить переменные env Git, когда я использую проект Freestyle, и используйте шаг оболочки echo $GIT_COMMIT. Все еще хочу знать, как заставить его работать, используя элемент задания Jenkinsfile + Pipeline.

+1

Вы можете получить доступ к переменным env в файле Jenkins, используя 'env.VARIABLE'. Я помню, что работает 'env.BRANCH_NAME'. – StephenKing

+2

Возможный дубликат [Jenkins Workflow Checkout Доступ к BRANCH \ _NAME и GIT \ _COMMIT] (http://stackoverflow.com/questions/36304208/jenkins-workflow-checkout-accessing-branch-name-and-git-commit) – StephenKing

ответ

7

Это не будет работать из-за отсутствия двойных кавычек, отсутствует фигурные скобки, и отсутствует env.:

sh 'echo $BRANCH_NAME' 

Это работает, как ожидалось в Jenkinsfile:

node { 
    sh "echo ${env.BRANCH_NAME}" 
} 
1

Возможно, вам понадобится сделать что-то подобное.

node { 
    def branch = env.BRANCH_NAME 
    sh "My branch name: ${branch}" 
} 
5

Так , любой, кто наткнулся на эту проблему с Stackoverflow, должен знать, что это ошибка с текущей ситуацией в конвейере.

Большого обсуждения здесь: https://issues.jenkins-ci.org/browse/JENKINS-35230

По существу плагин не может правильно добавлять переменные среды из-за некоторую несовместимость с трубопроводом.

+1

Выше выпустить дубликаты https://issues.jenkins-ci.org/browse/JENKINS-26100 - который теперь ФИКСИРОВАН! :-) Git plugin 3.3.1 был выпущен с объединенным необходимым запросом на растяжение. –

+0

WOO !! Спасибо, Морган! – Breedly

1

Это фиксируется в Git plugin 3.3.1

Version 3.3.1 (Jun 23, 2017)

  • печати первой линии сообщение фиксации в журнале консоли (Дженкинс-38241)
  • Разрешить шаги Scm (JENKINS-26100)
  • Не требуется крошка для POST в/git/notifyCommit, даже если включен CSRF (JENKINS-34350)
  • Фикс учетных данных отслеживания исключения нулевого указателя при использовании библиотеки трубопровода (Дженкинс-44640)
  • Фикса учетных данных отслеживания исключения нулевого указателя в параметрах GIT использовать (Дженкинс-44087)
+1

Также нужны последние Дженкинс. Он по-прежнему не работает, возможно, рабочий плагин cps также должен выпустить ... –

0

Большинство примеров трубопровода я нашла оберните код в закрытие «узла», которое по какой-то причине не позволяет плагину Jenkins Git заполнять переменные среды.

Однако, если вместо того, чтобы вы обернуть это так, то переменные окружения установлены правильно:

pipeline { 
    agent { 
    label ('<AGENT>') 
    } 
    stages { 
    stage('<STAGE>') { 
     steps { 
     <CODE> 
     } 
    } 
    } 
} 

Я не уверен, укупорочные имеют решающее значение здесь, но это форматирование позволило мне получить доступ ENV переменные, такие как env.GIT_COMMIT