Работая с работой в Дженкинсе (будь то декларатив или фристайл), нам часто необходимо передавать некоторые параметры в код, выполняемый при запусках работы. Jenkins поддерживает этот вариант использования с помощью параметров, которые вы можете объявить и использовать в качестве отличных переменных в работе Jenkins. Однако часто вы не знаете обо всех параметрах в начале, или иногда вы хотите отображать параметры динамически на основе значения, выбранного в любом другом параметре. Учитывая декларативный характер рабочих мест Дженкинса, мы не можем достичь варианта использования с доступными параметрами нативного Дженкинса. Вот идет Активный выбор параметров плагин на спасение, которое может помочь нам динамично отобразить параметры/значение параметра.
Плагин параметров Active Worces предоставляет 3 типа параметров.
- Параметр активного выбора
- Активный выбор реактивного параметра
- Активный выбор реактивного эталонного параметра
Давайте обсудим каждый из этих параметров и то, что они делают.
Параметр активного выбора
- Параметр активного выбора динамически генерирует список параметров значений для параметра сборки, используя отличный скрипт или сценарий из каталога сценариев.
- Параметры активного выбора могут быть отображены в виде стандартных списков выбора, флажок и радиопроизводительных кнопок.
- Фильтр текстового поля может быть опционально показан, чтобы помочь в фильтрации параметров значения.
Активный выбор реактивного параметра
- Реактивный параметр активного выбора может генерировать тот же набор параметров значений, что и параметр активного выбора; В дополнение к этому, его можно динамически обновлять значениями, основанными на выборе в некотором другом параметре сборки, который был упомянут в реактивном параметре активного выбора.
- Реактивные параметры активного выбора могут быть отображены в виде стандартных списков выбора, флажок и радиопроизводительных кнопок.
- Фильтр текстового поля может быть опционально показан, чтобы помочь в фильтрации параметров значения.
Активный выбор реактивного эталонного параметра
- Этот параметр предоставляет те же функции, что и активные варианты реактивных эталонных параметров.
- В дополнение к этому, это может улучшить форму пользовательского интерфейса задания с помощью пользовательских управлений HTML, таких как список, изображения, текстовые поля и т. Д. Мы можем отображать динамически сгенерированный HTML из Groovy Script, и он может хорошо его отображать на странице пользовательского интерфейса. Мы можем также добавить стиль JavaScript и CSS в элементы управления HTML, которые мы рендерируем, используя этот параметр.
Активные варианты использования
Параметр активного выбора
Когда мы хотим динамически генерировать раскрывающийся список флажков с помощью некоторого значения, возвращаемого из API. Например, мы можем сделать вызов API, чтобы получить все государства страны и вернуть его в качестве отличного списка, чтобы они были отображены в виде раскрывающегося списка.
Активный выбор реактивного параметра
Когда мы хотим сгенерировать выпадающие флажки на основе значения, возвращаемого из вызова API, плюс выбор в других зависимых параметрах сборки. Рассмотрим приведенный выше пример состояния, если мы хотим отображать все города для выбранного состояния, тогда мы можем использовать реактивный параметр активного выбора и обратиться к параметру состояния, чтобы мы могли использовать значение параметра состояния в сценарии Groovy для городов параметр.
Активный выбор реактивного эталонного параметра
Подумайте о трубопроводе развертывания для 3 -уровневого приложения, где мы должны развернуть несколько сервисов для каждого уровня. Если мы хотим, чтобы пользователь выбирал, какие услуги он/она хочет развернуть вместе с тегом релизов для этой службы, нам нужно одно дополнительное управление, чтобы попросить пользователя для тега релиза для выбора услуги, которую он/она выбрал. Мы можем достичь этого, используя реактивный эталонный параметр активного выбора, поскольку он позволяет нам динамически отображать компоненты HTML с использованием некоторого Groovy Script. Таким образом, мы можем иметь флажок и текстовый поле, который был невозможным в более ранних случаях. Подробное объяснение об использовании в этом разделе
Предварительные условия
- Этот плагин требует версии Jenkins.204.1.
- Плагин параметров Active Worces установлен на Jenkins.
Значения визуализации динамически на основе выбора в другом параметре сборки
В этом варианте использования мы увидим, как отображать раскрывающийся список с динамическими значениями, используя активные варианты реактивных параметров. Мы увидим, как мы можем настроить параметр Active Worces и реактивный параметр активного выбора.
- Сначала мы создадим для этого образцовый проект трубопровода. Войдите в Jenkins, нажмите на новый элемент, на следующей странице. Предоставьте имя по вашему выбору для вашего трубопровода, выберите трубопровод и нажмите ОК.
- На странице задания настройка выберите этот проект параметризованный флажок на вкладке «Общие».
- Теперь Нажмите на выпадающий параметров добавить параметры и выберите параметр Active Choice в списке.
- Панель конфигурации параметров будет выглядеть, как показано на изображении выше.
- В поле «Имя» добавьте любое имя для ваших параметров и выберите Groovy Script в радиопроизводительных кнопках Script. Добавьте подходящее описание для вашего параметра.
- Далее — выброс типа выбора, который имеет 4 варианта.
- Один выбор: он отобразит раскрывающий список, из которого пользователь может выбрать только одно значение. Значение будет доступно в коде трубопровода с помощью имени переменной.
- Multi Select: он отобразит раскрывающий список, из которого пользователь может выбрать несколько значений. Если пользователь выбрал несколько значений, то в значении кода трубопровода будет передано в виде строки, разделенной запятыми, мы можем получить значение с помощью имени параметра, так как мы получили бы его для любого другого параметра.
- Радиопроизводительные кнопки: это отобразит радионологическую группу для списка, который мы вернули из Groovy Script. Это будет только один параметр выбора.
- Флакторы: это отобразит группу флажков для списка, который мы вернули из Groovy Script. Если мы выберем несколько флажков, то значения будут разделены запятыми.
- Теперь мы добавим значения в этот параметр и увидим его в действии. (Сведите GIF выше, как мы можем добавить значения). Добавьте следующий код в поле Groovy Script.
return ["Gujarat", "Maharashtra", "Punjab"]
- Это составит раскрывающийся список с этими значениями. Благоприятный скрипт используется, когда есть какое -то исключение в выполнении скрипта. Сохраните задание и откройте страницу сборки с помощью страницы параметров.
- Вот как это будет видно на странице сборки с параметрами.
Теперь мы добавим активный выбор реактивного параметра, который обновит значения на основе выбора в параметре состояний. Мы сделаем города для штатов, которые мы отображали.
- Нажмите на настройку и прокрутите вниз до параметра состояний, который мы добавили.
- Нажмите еще раз на раскрывающемся списке добавления параметра и выберите «Реактивный параметр активного выбора».
- Заполните следующий код в поле Groovy Script.
if ( states == "Gujarat") { return ["Rajkot", "Ahmedabad", "Jamnagar"] } else if ( states == "Maharashtra") { return ["Mumbai", "Pune", "Nagpur"] } else if (states == "Punjab") { return ["Ludhiana", "Amritsar", "Jalandhar"] }
- Здесь мы ссылались на параметр состояний и использовали его значение в Groovy Script, чтобы отобразить значения для городов для этого состояния. Теперь нажмите кнопку Сохранить и нажмите на сборку с параметрами.
Он будет выглядеть примерно так на странице сборки с параметрами. На основании выбора в раскрывающемся списке штатов радиопроизводительные кнопки будут обновлены.
В настоящее время ни один из радиопроизводительных кнопков не выбран по умолчанию, если мы хотим, чтобы любая радиопроизводительная кнопка была выбрана по умолчанию, тогда мы можем добавить : выбрано
После значения в списке. Например, если мы хотим, чтобы Ахмедабад был выбран по умолчанию, то мы поместим что -то подобное,
if ( states == "Gujarat") { return ["Rajkot", "Ahmedabad:selected", "Jamnagar"] } …
Доступ к значениям в трубопроводе
Теперь мы добавим код трубопровода, чтобы увидеть значения добавленных нами параметров. Нажмите на настройку и прокрутите вниз в раздел трубопровода и добавьте там следующий скрипт.
pipeline { agent any stages { stage('Demo Active Choices Parameter') { steps { echo "States Selected ${states}" echo "Cities Selected ${cities}" } } } }
Сохраните конфигурацию и нажмите на сборку с параметрами, выберите состояние и город и нажмите на сборку, вывод консоли будет как ниже,
[Pipeline] { [Pipeline] stage [Pipeline] { (Demo Active Choices Parameter) [Pipeline] echo States Selected Gujarat [Pipeline] echo Cities Selected Ahmedabad [Pipeline] } [Pipeline] // stage [Pipeline] } [Pipeline] // node [Pipeline] End of Pipeline Finished: SUCCESS
В приведенном выше варианте использования мы использовали радиопроизводительные кнопки для городов; Давайте изменим его на флажки и посмотрим, как он устанавливает множественные значения в виде значений, разделенных запятыми. Мы перейдем в раздел «Настройка» и прокрутите вниз в раздел «Города», изменим тип выбора на флажки для параметра городов, сохранить и создать задание с выбранными несколькими городами и проверим вывод консоли.
Посмотрите на эхо для городов, у него есть несколько названий города, разделенных запятыми.
[Pipeline] Start of Pipeline [Pipeline] node Running on Jenkins in /var/lib/jenkins/workspace/tp [Pipeline] { [Pipeline] stage [Pipeline] { (Demo Active Choices Parameter) [Pipeline] echo States Selected Gujarat [Pipeline] echo Cities Selected Rajkot,Ahmedabad,Jamnagar [Pipeline] } [Pipeline] // stage [Pipeline] } [Pipeline] // node [Pipeline] End of Pipeline Finished: SUCCESS
Render HTML -входы управления с использованием активного выбора реактивного эталонного параметра
Мы постараемся написать образец конвейера Jenkins для развертывания выбранных сервисов для многоуровневого приложения вместе с тегом релиза. Мы отобразим раскрывающийся список с использованием параметра Active Worces, который перечисляет у нас уровни. И на основе выбора уровня, мы предоставим службы, которые будут иметь флажок и текстовый поле, где пользователь может передать тег релиза для Сервиса. Мы отодвинем флажок и текстовый поле в качестве управления вводом HTML.
- Мы начнем с создания новой работы. Перейдите в Jenkins Home, выберите новый элемент, добавьте имя для работы, для типа проекта, выберите Pipeline Project и нажмите OK.
- На странице настройки заданий выберите Этот проект параметризован Флажок в вкладке General.
- Теперь мы добавим параметр активного выбора, который отдает уровень приложений в качестве раскрывающегося списка. Нажмите «Добавить раскрытие параметров» в разделе «Параметры» и выберите там параметр активного выбора. Настройте параметр, как показано на изображении ниже.
- Приведенный выше параметр будет отображать уровни. Теперь нам необходимо добавить активный выбор реактивного эталонного параметра, который реагирует на основе выбора параметра уровня и предоставляет услуги для выбора.
- Нажмите на выпадающий параметр «Добавить параметр» и выберите «Активные варианты реактивного эталонного параметра». Настройте значения параметров, как показано на изображении ниже. Это будет иметь такую же конфигурацию, что и активный вариант реактивного параметра, который мы делали в предыдущем разделе, только тип выбора будет другим (отформатированный HTML) в этом случае.
Groovy Script для рендеринга HTML -входного управления динамически.
service_tier_map = [ "web": [ ["service_name": "user_frontend", "release_tag": "1.0.0" ], ["service_name": "admin_frontend", "release_tag": "1.0.2" ], ], "backend": [ ["service_name": "admin_service", "release_tag": "2.1.0" ], ["service_name": "finance_service", "release_tag": "2.2.0" ], ["service_name": "payment_service", "release_tag": "3.2.0" ], ], "database": [ ["service_name": "dynamo_db", "release_tag": "5.4.1"], ["service_name": "mysql", "release_tag": "3.2.1"], ["service_name": "postgresql", "release_tag": "1.2.3"], ], ] html_to_be_rendered = "
Давайте посмотрим, как мы отображаем входные данные HTML. Мы должны быть очень осторожны в отношении входов HTML и их синтаксиса, как если бы мы изменили некоторую конфигурацию вокруг них, мы не сможем получить значение этого элемента управления вводом в коде трубопровода.
Как мы можем отображать вход Textbox HTML
Для элемента управления текстовым полем мы можем использовать приведенный ниже синтаксис, мы можем обновить некоторые значения в соответствии с нашим использованием.
Посмотрите на параметр имени для этого тега HTML, мы не можем изменить его и должны быть такими же, как упомянуто здесь. Если мы изменим его, мы не сможем получить значение этого текстового поля в коде трубопровода.
Как мы можем отобразить флажок HTML вход
Для управления флажком мы можем использовать приведенный ниже синтаксис, мы можем обновить некоторые значения в соответствии с нашим использованием.
Как мы видели для ввода TextBox имя должно быть значением. Атрибуты ALT и JSON являются необязательными, но, поскольку у нас есть несколько флажков в нашем вазе использования, нам нужно использовать этот параметр, чтобы определить, какой флажок был проверен. Если мы не передаем параметр ALT и JSON, то значение для флажести будет рассматриваться как верно в коде трубопровода, но если мы передаем ALT и JSON, то значение флажки будет рассматриваться как строка, которую мы передали Альт и Джсон.
ПРИМЕЧАНИЕ: Мы можем увидеть только выбранные флажки в коде трубопровода, невыбранные будут игнорироваться Дженкинсом. Также параметры ALT и JSON должны иметь одинаковое значение для флажона.
Сохраните конфигурацию и откройте страницу сборки на странице параметров, это будет что -то подобное.
Код трубопровода для доступа к значениям
Давайте добавим код трубопровода, чтобы увидеть значения в действии. Откройте страницу задания «Настройка», прокрутите вниз до последнего и добавьте следующий скрипт в текстовое поле кода трубопровода.
pipeline { agent any stages { stage('Demo Active Choices Parameter') { steps { echo "Tier Selected ${tier}" echo "Services Selected ${services}" } } } }
Сохраните задание и запустите задание, нажав на сборку с параметрами, выберите уровень и сервисы, которые вы хотите развернуть, и нажмите на сборку. Я запустил задание, используя приведенные ниже параметры, и вывод для того же самого упоминается ниже.
Вывод консоли:
[Pipeline] { [Pipeline] stage [Pipeline] { (Demo Active Choices Parameter) [Pipeline] echo Tier Selected backend [Pipeline] echo Services Selected admin_service,2.1.0,2.2.0,payment_service,2.3.0, [Pipeline] } [Pipeline] // stage [Pipeline] } [Pipeline] // node [Pipeline] End of Pipeline Finished: SUCCESS
Давайте поймем выход, оператор Echo для уровня прост, он печатает любой уровень, который мы выбрали на странице сборки с параметрами.
Второй оператор ECHO, который печатает услуги параметров сборки, имеет разделенные запятыми значения для управления входами HTML, которые мы отображали. Мы предоставили Service_Name в поле ALT и JSON для флажков, поэтому, какие бы флажки, которые мы выбрали, их имя будет сохранено в выводе. Если мы не предоставим поле ALT и JSON во время отображения HTML для флажков, мы увидим текст «выбран» вместо имени, и мы никогда не сможем определить, какой флажок был выбран.
Для текстовых поток он печатает значение, которое мы добавили в поле ввода. Порядок, в котором напечатаны эти значения, представляет собой тот же порядок, в котором элементы управления были отображены из Groovy сценария. Мы можем разделить это значение на основе запятых и можем развернуть наши услуги.
Вывод
Декларативный трубопровод Jenkins позволяет легко создавать CI/CD для различных систем, но в то же время декларативный характер трубопровода становится головной болью, когда мы хотим динамически визуализировать параметр. Поскольку мы должны объявить все параметры, прежде чем запустить трубопровод, и в приведенном выше случае с использованием мы не уверены, какие параметры нам нужны.
Плагин активного выбора помогает решить эту проблему, позволяя нам отображать значения параметров и даже параметры динамически с помощью Groovy и HTML -кода. Этот плагин очень прост в использовании, поскольку он нуждается в только базовом уровне понимания Groovy и HTML.
Это обертка, люди:) Надеюсь, статья была информативной, и вам понравилось читать ее. Я хотел бы услышать ваши мысли и опыт — давайте подключимся и начнем разговор о LinkedIn .
Библиография и ссылка
Оригинал: «https://dev.to/nkatarmal/how-to-render-jenkins-build-parameters-dynamically-4309»