Динамическое заполнение параметра выбора Jenkins ветвями Git в указанном репо

У меня есть параметризованная работа Jenkins, которая требует ввода определенной ветки Git в определенном репозитории Git. В настоящее время этот параметр является строковым.

Есть ли способ сделать этот параметр параметром выбора и динамически заполнять раскрывающийся список ветвями Git? Я не хочу требовать, чтобы кто-то поддерживал этот параметр выбора, вручную настраивая раскрывающийся список каждый раз, когда создается новая ветка.


person mkez00    schedule 03.05.2012    source источник


Ответы (14)


Расширенный плагин параметра выбора позволит вам прочитать варианты выбора из файла.

Конечно, теперь у вас есть другая проблема: как убедиться, что файл обновлен (это можно сделать с помощью ловушки после фиксации) и распространен среди всех пользователей (это можно сделать, поместив его в общую папку). файловый сервер). Но могут быть и лучшие решения.

person malenkiy_scot    schedule 03.05.2012
comment
Мы используем плагин Extensible Choice Parameter с отличный скрипт: return [" "].plus(["powershell","(git.exe ls-remote -h http://review/Project)-replace '\\w{40}\\trefs/heads/'"].execute().text.tokenize()). Это PowerShell, поскольку он находится на компьютере с Windows, но вы можете заменить его другим инструментом для замены RegEx. Это позволит обновлять список при каждой загрузке без необходимости использования внешних файлов. - person Stoinov; 06.04.2015
comment
@Stoinov Мне очень нравится ваше решение. У меня проблемы с тем, чтобы это работало на сервере Linux. - person RockyMountainHigh; 13.07.2017
comment
У меня очень мало опыта работы с Linux, но вы сможете использовать любую команду Linux, которая может заменить список, возвращаемый командой git. - person Stoinov; 14.07.2017
comment
отличный фрагмент, в моем случае мне не хватает ssh auth для git .... - person Vincent Gerris; 23.04.2021
comment
Спасибо, что поделились этой идеей, спасли мне день. Я изменил код в моем конвейере, чтобы установить ветвь по умолчанию для master, используя параметр CascadeChoiceParameter. - person elulcao; 14.07.2021

Я попробовал несколько ответов, упомянутых в этой ссылке, но не мог понять, как рассказать Дженкинсу о выбранной пользователем ветке. Как упоминалось в моем предыдущем комментарии в вышеупомянутой ветке, я оставил поле селектора ветки пустым.

Но в ходе дальнейших исследований я нашел другой способ сделать то же самое - https://wiki.jenkins-ci.org/display/JENKINS/Git+Parameter+Plugin Я обнаружил, что этот метод намного проще и требует меньше настроек!

Вот что я настроил -

  1. Установлен плагин параметров git
  2. Отметил "Эта сборка параметризована" и добавил параметр Git.
  3. Добавлены следующие значения: Конфигурация плагина Git Parameter в задании

  4. Затем в разделе git SCM задания я добавил то же значение, что и в разделе «Имя», как если бы это была переменная среды. (Если вы внимательно прочитаете справку по этому плагину параметров git, вы поймете это) Branch Selector

После этого я просто запустил сборку, выбрал свою ветку (Дженкинс проверяет эту ветку перед сборкой), и она успешно завершила сборку, И выбрав ветку, которую я указал.

person Ravindra Mijar    schedule 23.03.2015
comment
Известные ограничения / ошибки: плагин параметров git не поддерживает настройку ведомого устройства Jenkins с репозиториями git, проверенными только на ведомых устройствах - person AmokHuginnsson; 22.10.2015
comment
Я был в восторге от этого, но, к сожалению, он страдает от ошибки, из-за которой учетные данные не передаются на сервер git. Поэтому, если вам нужны учетные данные (например, для частных репозиториев на github), это не сработает, пока не будет рассмотрен JENKINS-28597. - person Mike Post; 13.11.2015
comment
К сожалению, я не могу получить имя ветки без origin /. $ {BRANCH_SELECTOR ## * /} не работает при вставке переменных. - person igor; 10.12.2015
comment
Что ж, для меня список выбора содержит origin / ‹branch-name› .. Так что это автоматически попадает в переменную $ BRANCH_SELECTOR .. - person Ravindra Mijar; 10.12.2015
comment
@AmokHuginnsson исправлено и выпущено в начале июля issues.jenkins-ci.org/browse/JENKINS-16290 - person montss; 21.09.2016
comment
@montss, извини, этого недостаточно. Плагин не предлагал мне выбора, пока я не запустил сборку один раз. Почему? Почему он не может выполнить эквивалент git ls-remote в отношении репозитория и с использованием учетных данных, указанных в задании? - person Mikhail T.; 06.10.2017
comment
можно ли использовать этот плагин через Jenkinsfile вместо пользовательского интерфейса? - person marengaz; 04.01.2018
comment
Я не пробовал @marengaz. Извините. Разместите здесь свое открытие, если вам удастся заставить его работать. - person Ravindra Mijar; 08.01.2018
comment
Работает как шарм - person Yasir Ali; 23.02.2018
comment
Я выбрал вариант «Ветвь или тег». Протестировано с ветками и отлично работает. Также отлично работает с тегами. Плагин Git paramter великолепен. - person Tara Prasad Gurung; 16.03.2018
comment
Обратите внимание, что вы не можете использовать Lightweight checkout с этим issues.jenkins-ci.org/browse/ - person micseydel; 27.06.2018
comment
Как вы можете разрешить пользователю выбирать репозиторий, а затем ветки в этом репозитории - person Yaron; 29.07.2020

Мне удалось добиться этого результата с помощью подключаемого модуля динамических параметров Jenkins. Я использовал параметр Dynamic Choice Parameter, а для сценария выбора я использовал следующее:

proc1 = ['/bin/bash', '-c', "/usr/bin/git ls-remote -h ssh://[email protected]/path/to/repo.git"].execute()
proc2 = ['/bin/bash', '-c', "awk '{print \$2}'"].execute()
proc3 = ['/bin/bash', '-c', "sed s%^refs/heads%origin%"].execute()

all = proc1 | proc2 | proc3
String result = all.text

String filename = "/tmp/branches.txt"
boolean success = new File(filename).write(result) 

def multiline = "cat /tmp/branches.txt".execute().text
def list = multiline.readLines()
person veritius    schedule 02.09.2014
comment
В качестве дополнения я обнаружил, что ssh не всегда доступен, но не обязательно нужен. В качестве альтернативы можно использовать что-то вроде этого: proc1 = ['/bin/bash', '-c', "/usr/bin/git ls-remote -h [email protected]:path/to/repo.git"].execute() Это особенно полезная информация при работе с github. - person veritius; 17.09.2014
comment
Почему-то всегда подбирается ветка на 8 позиции. (У меня около 19 филиалов). Независимо от того, что я выберу. Есть идеи, нужно ли выполнить дополнительную настройку в работе Jenkins? Или с плагином что-то не так? Я оставил поле «ветка» пустым. - person Ravindra Mijar; 23.03.2015
comment
Похоже, вы описываете проблему нижестоящего уровня, это просто объясняет, как динамически заполнять параметр ветками git. Чтобы использовать ветвь в сборке, я обычно называю ветвь параметра, а затем в разделе «Управление исходным кодом» (с выбранным Git) использую $ {branch} (без кавычек) для поля «Ветви для создания спецификатора ветвления» (пустое для «любого»). Надеюсь, это поможет. - person veritius; 24.03.2015
comment
О, похоже на то, что я нашел с плагином Git Parameter (опубликовал свое открытие как еще один возможный ответ ниже). Спасибо за эту информацию. - person Ravindra Mijar; 25.03.2015
comment
Хороший ответ, но, к сожалению, я вынужден проголосовать против, потому что подключаемый модуль динамических параметров был приостановлен из распространения Jenkins из-за уязвимости удаленного выполнения кода: jenkins.io/security/advisory/2017-04-10/ - person Nik Reiman; 22.06.2017

Это довольно просто с помощью «Git Parameter Plug-in».

Добавьте имя типа "SELECT_BRANCH" ## Убедитесь, что указана эта переменная, так как она будет использоваться позже. Затем Тип параметра: Ветвь

Затем обратитесь в SCM: выберите: Git и спецификатор ветки: $ {SELECT_BRANCH}.

Для проверки выполните в оболочке jenkins ниже:

эхо $ {SELECT_BRANCH}

env. введите описание изображения здесь

введите описание изображения здесь

person Smit Jain    schedule 15.10.2016
comment
В моем случае мы работаем с функциональными ветками. Jenkins должен автоматически создавать, когда кто-то отправляет код в ветку функции. Когда код запускается изменениями SCM, параметр будет пустым. Поэтому мне пришлось нажать «Дополнительно» и ввести ** в поле «Значение по умолчанию», чтобы автоматическая сборка в результате изменения SCM работала. - person Antony; 15.06.2017

Для себя я использую параметр входного этапа:

  1. Я начинаю свой конвейер с просмотра проекта git.
  2. Я использую команду awk для создания файла barnch.txt со списком всех веток
  3. В настройках сцены я читаю файл и использую его для генерации параметров выбора ввода.

Когда пользователь запускает конвейер, он будет ждать его выбора из списка.

pipeline{
agent any

stages{

    stage('checkout scm') {
        steps {
            script{
                git credentialsId: '8bd8-419d-8af0-30960441fcd7', url: 'ssh://[email protected]:/usr/company/repositories/repo.git'
                sh 'git branch -r | awk \'{print $1}\' ORS=\'\\n\' >>branch.txt'
            }

        }
    }
     stage('get build Params User Input') {
        steps{
            script{

                liste = readFile 'branch.txt'
                echo "please click on the link here to chose the branch to build"
                env.BRANCH_SCOPE = input message: 'Please choose the branch to build ', ok: 'Validate!',
                        parameters: [choice(name: 'BRANCH_NAME', choices: "${liste}", description: 'Branch to build?')]


            }
        }
    } 
    stage("checkout the branch"){
        steps{
            echo "${env.BRANCH_SCOPE}"
            git  credentialsId: 'ea346a50-8bd8-419d-8af0-30960441fcd7', url: 'ssh://[email protected]/usr/company/repositories/repo.git'
            sh "git checkout -b build ${env.BRANCH_NAME}"
        }
    }
    stage(" exec maven build"){
        steps{
            withMaven(maven: 'M3', mavenSettingsConfig: 'mvn-setting-xml') {
               sh "mvn clean install "
            }
        }
    }
    stage("clean workwpace"){
        steps{
            cleanWs()
        }
    }
}

}

Затем пользователь будет взаимодействовать со сборкой:

введите здесь описание изображения

введите здесь описание изображения

person idriss Eliguene    schedule 06.06.2018

У меня здесь аналогичная проблема. Наши пользователи переводят свою работу из фристайла в конвейер. Они не хотят, чтобы Jenkinsfile хранился в их репозиториях (историческая причина), и по-прежнему хотят использовать плагин "Git Parameter".

Поэтому мы должны использовать «Pipeline script» и разработать другой плагин, который работает как «Git Parameter».

Этот новый плагин не интегрируется с настройкой SCM в проекте. Плагин находится по адресу https://plugins.jenkins.io/list-git-branches-parameter

Надеюсь, это поможет и вам

person 黄索远    schedule 25.12.2018
comment
Спасибо за этот плагин! Единственная проблема в том, что мы используем декларативный конвейер с двумя другими параметрами. Если мы настроим это с помощью пользовательского интерфейса, он будет работать, но после его запуска часть параметров будет удалена. Как это настроить в декларативном конвейере в разделе параметров? - person Thomas Stubbe; 28.08.2019
comment
Чтобы дать более конкретный пример, примерно так: parameters { string(defaultValue: "...", description: '...?', name: 'version') choice(choices: ['a', 'b'], description: '...?', name: 'environment') listGitBranches(parameterType: 'Branch', credentialId: '[id]', repositoryUrl: '[repoUrl]', name: 'branch') } - person Thomas Stubbe; 28.08.2019

У меня есть новый ответ на этот случай: простой способ решить эту проблему - получить jenkinsFile из исходного кода.

Затем вы выбрали: у этого задания есть параметр git

введите здесь описание изображения

Кроме того, в настройке конвейера снимите флажок «Легкая проверка», это приведет к действительно git-проверке в рабочей области.

введите здесь описание изображения

После этого параметр будет автоматически заполнен вашей веткой git

person idriss Eliguene    schedule 18.04.2019

расширение ответа @ malenkiy_scot. Я создал новое задание jenkins для создания файла, который используется плагином Extended Choice Plugin.

вы можете сделать следующее (я сделал это как выполнение шагов оболочки в jenkins, но вы могли сделать это в скрипте):

git ls-remote [email protected]:my/repo.git |grep refs/heads/* >tmp.txt
sed -e 's/.*refs\/heads\///' tmp.txt > tmp2.txt
tr '\n' ',' < tmp2.txt > tmp3.txt
sed '1i\branches=' tmp3.txt > tmp4.txt
tr -d '\n'  < tmp4.txt > branches.txt

Затем я использую плагин развертывания Artifact, чтобы отправить этот файл в общую папку, которая находится в веб-URL-адресе, а затем просто использую http: //localhost/branches.txt в плагине Extended Choice в качестве URL-адреса. работает как шарм.

person Ben    schedule 12.01.2013
comment
Хм. это публичное репо? вы можете поделиться URL-адресом git? Мне было бы любопытно узнать, почему это не сработало - person Ben; 21.03.2013

Вы можете сделать то же самое, используя плагин расширенного выбора параметров, ранее упомянутый malenkiy_scot, и простой скрипт php следующим образом (при условии, что у вас есть где-то сервер для развертывания скриптов php, которые вы можете запустить с машины Jenkins)

<?php
chdir('/path/to/repo');
exec('git branch -r', $output);
print('branches='.str_replace('  origin/','',implode(',', $output)));
?>

or

<?php
exec('git ls-remote -h http://user:[email protected]', $output);
print('branches='.preg_replace('/[a-z0-9]*\trefs\/heads\//','',implode(',', $output)));
?>

В первом варианте вам нужно будет клонировать репо. Со вторым вы этого не сделаете, но в обоих случаях вам понадобится git, установленный на сервере, на котором размещен ваш php-скрипт. Несмотря на то, что любая из этих опций становится полностью динамической, вам не нужно создавать файл списка. Просто поместите URL-адрес вашего скрипта в поле расширенного параметра выбора "файл свойств".

person Ulises    schedule 06.03.2013
comment
Итак, вам нужен этот php-скрипт на веб-сервере, на котором установлен git + учетные данные ssh для доступа к серверу git. OK. Но как вызвать этот php-скрипт из плагина расширенных параметров выбора? - person Amedee Van Gasse; 17.02.2015

Да, я написал небольшой отличный скрипт, который поможет вам. Вам следует добавить к своей работе «Параметр динамического выбора» и настроить следующий отличный скрипт под свои нужды:

#!/usr/bin/groovy

def gitURL = "git repo url"
def command = "git ls-remote --heads --tags ${gitURL}"

def proc = command.execute()
proc.waitFor()              

if ( proc.exitValue() != 0 ) {
   println "Error, ${proc.err.text}"
   System.exit(-1)
}

def text = proc.in.text
# put your version string match
def match = /<REGEX>/
def tags = []

text.eachMatch(match) { tags.push(it[1]) }
tags.unique()
tags.sort( { a, b ->
         def a1 = a.tokenize('._-')
         def b1 = b.tokenize('._-')
         try {
            for (i in 1..<[a1.size(), b1.size()].min()) { 
                 if (a1[i].toInteger() != b1[i].toInteger()) return a1[i].toInteger() <=> b1[i].toInteger()
            }
            return 1
         } catch (e) {
            return -1;
         }
} )
tags.reverse()

В моем случае строка версии была в следующем формате X.X.X.X и могла иметь пользовательские ветки в формате X.X.X-username и т. Д. Поэтому мне пришлось написать свою собственную функцию сортировки. Это был мой первый отличный сценарий, поэтому я хотел бы знать, есть ли способы сделать что-то лучше.

person sagi    schedule 16.03.2014
comment
Остерегайтесь этого скрипта, запуск его в параметре Dynamic Choice Parameter привел к сбою моего Jenkins (2.7, 2.8) - person Noam Manos; 13.06.2016
comment
Вы можете сказать почему? у вас есть обратный след? Никогда не пробовал на версии 2.X - person sagi; 15.06.2016
comment
вероятно, это из-за вызова System.exit () (не связанного с версией Jenkins) - person Noam Manos; 15.06.2016
comment
Я думаю, это не поддерживает ssh creds для git? А System.exit вызывать не надо, он убивает процесс дженкинса? - person Vincent Gerris; 23.04.2021

Мы можем исключить ненужное чтение / запись файла, используя text. Мое полное решение следующее:

proc1 = ['/bin/bash', '-c', 
  "/usr/bin/git ls-remote --heads ssh://repo_url.git"].execute()
proc2 = ['/bin/bash', '-c', 
  "/usr/bin/awk ' { gsub(/refs\\/heads\\//, \"\"); print \$2 }' "].execute()
all = proc1 | proc2

choices = all.text
return choices.split().toList();
person janoskk    schedule 12.12.2017

Следующий отличный скрипт будет полезен, если ваша работа не использует напрямую «Управление исходным кодом» (аналогично «Плагин параметров Git»), но все же имеет доступ к локальному (клонированному) репозиторию git:

import jenkins.model.Jenkins

def envVars = Jenkins.instance.getNodeProperties()[0].getEnvVars() 
def GIT_PROJECT_PATH = envVars.get('GIT_PROJECT_PATH') 
def gettags = "git ls-remote -t --heads origin".execute(null, new File(GIT_PROJECT_PATH))

return gettags.text.readLines()
         .collect { it.split()[1].replaceAll('\\^\\{\\}', '').replaceAll('refs/\\w+/', '')  }
         .unique()

См. Полное объяснение здесь: https://stackoverflow.com/a/37810768/658497

person Noam Manos    schedule 15.06.2016

Я осведомлен о том, что в исходном вопросе конвейер Jenkins не упоминался, но если он все еще применим (с его использованием), я считаю это решение простым в обслуживании и удобным.

Этот подход описывает настройки, необходимые для создания конвейера Jenkins, который опрашивает (перечисляет) динамически все ветви определенного репозитория, что затем позволяет пользователю запускать конвейер с некоторой конкретной ветвью при запуске сборки этого задания.

Предположения здесь следующие:

  • Сервер Jenkins - 2.204.2 (размещен на Ubuntu 18.04).
  • Репозиторий размещен в BitBucket.

Первое, что нужно сделать, это предоставить учетные данные Jenkins для подключения (и получения) к частному репозиторию в BitBucket. Это можно сделать, создав пару ключей SSH для связи между пользователем Jenkins (!!) на машине, на которой размещен сервер Jenkins, и (частным) репозиторием BitBucket.

  1. Прежде всего, необходимо создать SSH-ключ для пользователя Jenkins (который является пользователем, который запускает сервер Jenkins - скорее всего, он создается по умолчанию при установке):

    guya@ubuntu_jenkins:~$ sudo su jenkins 
    [sudo] password for guya:
    jenkins@ubuntu_jenkins:/home/guya$ ssh-keygen
    

    Результат должен выглядеть примерно так:

Создание пары ключей открытого и закрытого типа RSA. Введите файл для сохранения ключа
(/var/lib/jenkins/.ssh/id_rsa): Создан каталог '/var/lib/jenkins/.ssh'. Введите кодовую фразу (пусто, если кодовая фраза отсутствует): Введите ту же парольную фразу еще раз: Ваша идентификационная информация была сохранена в /var/lib/jenkins/.ssh/id_rsa. Ваш открытый ключ сохранен в /var/lib/jenkins/.ssh/id_rsa.pub. Отпечаток ключа: SHA256: q6PfEthg + 74QFwO + esLbOtKbwLG1dhtMLfxIVSN8fQY jenkins @ ubuntu_jenkins Изображение случайного изображения ключа: + --- [RSA 2048] ---- + | . .. o.E. | | . . .o ... o | | . о .. о | | + .oo | | . ooX..S | | .. +. Бо *. | |. ++ оо * о. | | .. + * .. * o | | . = + o == +. | + ---- [SHA256] ----- + jenkins @ ubuntu_jenkins: / home / guya $

  1. Теперь содержимое этого SSH-ключа необходимо установить в репозитории BitBucket следующим образом:
  • Создайте (добавьте) SSH-ключ в репозиторий BitBucket, перейдя по ссылке: Settings --> Access keys --> Add key.
  • Предоставьте ключу разрешения на чтение и скопируйте содержимое ключа PUBLIC в тело ключа. Содержимое ключа можно отобразить, запустив: cat /var/lib/jenkins/.ssh/id_rsa.pub
  1. После этого SSH-ключ был установлен в репозитории BitBucket, нам нужно сказать Jenkins, чтобы он действительно ИСПОЛЬЗОВАЛ его, когда он пытается получить (прочитать в данном случае) содержимое репозитория. ОБРАТИТЕ ВНИМАНИЕ, что сообщение Jenkins фактически означает предоставление пользователю jenkins этой привилегии.

Это можно сделать, добавив новое имя пользователя SSH с закрытым ключом в Jenkins --> Credentials --> System --> Global Credentials --> Add credentials.

  • В разделе ID введите любое описательное имя для ключа.
  • В разделе «Имя пользователя» введите имя пользователя сервера Jenkins, равное jenkins.
  • Отметьте раздел Закрытый ключ и вставьте содержимое ЧАСТНОГО ключа, который был сгенерирован ранее путем копирования и вставки содержимого: ~/.ssh/id_rsa. Это закрытый ключ, который начинается со строки: -----BEGIN RSA PRIVATE KEY----- и заканчивается строкой: -----END RSA PRIVATE KEY-----. Обратите внимание, что весь этот блок следует скопировать и вставить в приведенный выше раздел.
  1. Установите подключаемый модуль Git Parameter, который можно найти на его официальной странице здесь

  2. Самый минимальный конвейер, необходимый для отображения (динамического) списка всех ветвей данного репозитория, выглядит следующим образом:

    pipeline 
    { 
        agent any parameters
        { 
            gitParameter branchFilter: 'origin/(.*)', defaultValue: 'master', name: 'BRANCH', type: 'PT_BRANCH' 
        }
        stages 
        { 
           stage("list all branches") 
           { 
               steps 
               { 
                    git branch: "${params.BRANCH}", credentialsId: "SSH_user_name_with_private_key", url: "ssh://[email protected]:port/myRepository.git" 
               } 
          } 
       } 
    }
    

ПРИМЕЧАНИЯ:

  • Для defaultValue установлено значение master, так что если веток не существует - они будут отображаться в раскрывающемся списке конвейера.
  • credentialsId имеет имя учетных данных, настроенных ранее.
  • В этом случае я использовал SSH URL-адрес репозитория в параметре url.
  • Этот ответ предполагает (и настроен), что сервер git - это BitBucket. Я предполагаю, что все административные настройки, сделанные на начальных этапах, имеют свои эквивалентные настройки в GitHub.
person Guy Avraham    schedule 03.10.2020

Вы можете попробовать это, этот список динамических имен веток в раскрывающемся списке w.r.t введен Git Repo.

Требуются плагины Jenkins:

  1. Проверка строкового параметра
  2. Активный выбор

ВАРИАНТ 1. Файл Jenkins:

    properties([
        [$class: 'JobRestrictionProperty'], parameters([validatingString(defaultValue: 'https://github.com/kubernetes/kubernetes.git', description: 'Input Git Repo (https) Url', failedValidationMessage: 'Invalid Git Url. Retry again', name: 'GIT_REPO', regex: 'https://.*'), [$class: 'CascadeChoiceParameter', choiceType: 'PT_SINGLE_SELECT', description: 'Select Git Branch Name', filterLength: 1, filterable: false, name: 'BRANCH_NAME', randomName: 'choice-parameter-8292706885056518', referencedParameters: 'GIT_REPO', script: [$class: 'GroovyScript', fallbackScript: [classpath: [], sandbox: false, script: 'return[\'Error - Unable to retrive Branch name\']'], script: [classpath: [], sandbox: false, script: ''
                            'def GIT_REPO_SRC = GIT_REPO.tokenize(\'/\')
                            GIT_REPO_FULL = GIT_REPO_SRC[-2] + \'/\' + GIT_REPO_SRC[-1]
                            def GET_LIST = ("git ls-remote --heads [email protected]:${GIT_REPO_FULL}").execute()
                            GET_LIST.waitFor()
                            BRANCH_LIST = GET_LIST.in.text.readLines().collect {
                                it.split()[1].replaceAll("refs/heads/", "").replaceAll("refs/tags/", "").replaceAll("\\\\^\\\\{\\\\}", "")
                            }
                            return BRANCH_LIST ''
                            ']]]]), throttleJobProperty(categories: [], limitOneJobWithMatchingParams: false, maxConcurrentPerNode: 0, maxConcurrentTotal: 0, paramsToUseForLimit: '
                            ', throttleEnabled: false, throttleOption: '
                            project '), [$class: '
                            JobLocalConfiguration ', changeReasonComment: '
                            ']])
    try {
        node('master') {
            stage('Print Variables') {
                echo "Branch Name: ${BRANCH_NAME}"
            }
    }
    catch (e) {
        currentBuild.result = "FAILURE"
        print e.getMessage();
        print e.getStackTrace();
    }



ВАРИАНТ 2. Пользовательский интерфейс Jenkins

введите описание изображения здесь

введите описание изображения здесь



Пример вывода:

введите описание изображения здесь

person M.S. Arun    schedule 05.12.2020