Рубрики
Uncategorized

Как динамически отображать параметры построения Jenkins?

Работая с работой в Дженкинсе (будь то декларатив или фристайл), нам часто нужно пройти … Tagged с DevOps, CI CD, Jenkins, Genkins Plugins.

Работая с работой в Дженкинсе (будь то декларатив или фристайл), нам часто необходимо передавать некоторые параметры в код, выполняемый при запусках работы. Jenkins поддерживает этот вариант использования с помощью параметров, которые вы можете объявить и использовать в качестве отличных переменных в работе Jenkins. Однако часто вы не знаете обо всех параметрах в начале, или иногда вы хотите отображать параметры динамически на основе значения, выбранного в любом другом параметре. Учитывая декларативный характер рабочих мест Дженкинса, мы не можем достичь варианта использования с доступными параметрами нативного Дженкинса. Вот идет Активный выбор параметров плагин на спасение, которое может помочь нам динамично отобразить параметры/значение параметра.

Плагин параметров Active Worces предоставляет 3 типа параметров.

  1. Параметр активного выбора
  2. Активный выбор реактивного параметра
  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 = ""
service_list = service_tier_map[tier]
service_list.each { service ->
  html_to_be_rendered = """
    ${html_to_be_rendered}
    
"""
}


html_to_be_rendered = "${html_to_be_rendered}
" return 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»