2017-02-22 11 views
12

Я создаю трубопровод jenkins, и он тянет сценарий конвейера от scm.
Я установил спецификатор ветки в 'all', поэтому он основывается на любом изменении любой ветки.Получить имя ветки джина в Jenkins Jenkinsfile

Как получить доступ к названию ветки, вызывающему эту сборку из файла Jenkins?

Все, что я пытался эхо ВНЕ неопределенные кроме

sh(returnStdout: true, script: 'git rev-parse --abbrev-ref HEAD').trim() 

который всегда master.

ответ

3

Если у вас есть файл jenkins для вашего конвейера, проверьте, не отображается ли во время выполнения ваше имя филиала в вашем environment variables.

Вы можете распечатать их с:

pipeline { 
    agent any 

    environment { 
     DISABLE_AUTH = 'true' 
     DB_ENGINE = 'sqlite' 
    } 

    stages { 
     stage('Build') { 
      steps { 
       sh 'printenv' 
      } 
     } 
    } 
} 

Однако PR 91 показывает, что название филиала устанавливается только в определенных конфигурациях трубопровода:

+0

Спасибо, это было полезно. Похоже, что это не в моих переменных окружения. Возможно ли открыть ветку, вызвавшую сборку? –

2

Переключение на многоканальный конвейер позволило мне получить доступ к названию филиала. Не рекомендуется регулярный трубопровод.

+0

Да, прочитав https://github.com/jenkinsci/pipeline-model-definition-plugin/pull/91, вы должны увидеть его в «BRANCH_NAME». – VonC

4

Коллега сказал мне использовать scm.branches[0].name, и это сработало. Я завернул его функции в моем Jenkinsfile:

def getGitBranchName() { 
    return scm.branches[0].name 
} 
+0

Пытался что и получил .. ... org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: Сценарии не разрешается использовать метод branch_name не работает и env.BRANCH_NAME возвращает нуль ... – James

+1

Если вы устанавливаете общую библиотеку как глобальную, у вас не будет проблем с безопасностью. Другой способ заключается в том, чтобы разрешить эти исключения безопасности в «Управление Jenkins» в «Утверждении сценария процесса» – Chen

+0

Вы также можете использовать белый список этого метода –

3

Использование многоотраслевая трубопровода .. не трубопровода

В моем сценарии ..

stage('Build') { 
    node { 
     echo 'Pulling...' + env.BRANCH_NAME 
     checkout scm 

    } 
} 

Урожайность ...

Pulling...master 
+1

Это на самом деле просто имя задания, а не ветви git. Это работает до тех пор, пока ваши задания имеют то же имя, что и ваши филиалы. – Ctwx

+0

А также все эти переменные определены на странице плагина Git здесь в разделе Переменные среды: https://plugins.jenkins.io/git – arjabbar

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