Статьи

Автоматическая настройка Jenkins через надстройку облачных сценариев

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

Это достигается за счет объединения двух прогрессивных технологий: подключаемых модулей Jelastic и   операций Cloud Scripting — решения нового поколения для управления приложениями и серверами в облаке, которое в настоящее время интенсивно разрабатывается командой Jelastic. В частности, такая интеграция позволяет автоматически создавать полный список шаблонов заданий, которые просто нужно слегка настроить (с помощью таких операций, как установка URL-адреса для хранилища с требуемым проектом вместо того, который используется по умолчанию) для завершения работы сервера Jenkins. регулировка.

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

Проект-update_2

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

Общие препараты

Прежде всего, позвольте нам напомнить вам о нескольких обязательных договоренностях, которые необходимо выполнить для обеспечения наилучшего опыта DevOps:

  • Ваша установка Jelastic должна включать три отдельных набора оборудования, выделенных для   групп разработкитестирования  и  производства отдельно:

image07

  • Поскольку ядро ​​подхода непрерывной доставки приложений, о котором мы говорим, представлено на сервере Jenkins, вам необходимо иметь среду с соответствующим программным обеспечением. Как вы помните из наших предыдущих руководств в серии, получить его становится довольно легко с помощью встроенного Jelastic Marketplace, доступ к которому можно получить либо через соответствующую  страницу сайта,  либо непосредственно через  панель инструментов .

image00

Ранее мы подробно рассмотрели эти шаги, поэтому мы уверены, что у вас не возникнет никаких проблем.

Настройка Jenkins с использованием облачных сценариев

Как уже упоминалось во введении к этому руководству, большая часть работы на этапе настройки сервера Jenkins будет автоматизирована. Чтобы добиться этого, сначала в коде должны быть реализованы соответствующие конфигурации, которые впоследствии будут выполняться на вашем сервере приложений с обработкой Jenkins. В Jelastic это можно сделать путем подготовки специального файла манифеста JSON, который, будучи интегрированным в платформу, будет представлять собой подключаемое  дополнение , которое может быть легко запущено любым пользователем непосредственно через панель мониторинга.

Создание дополнения

Давайте начнем с составления основы для нашего дополнения, чтобы получить возможность применять его в требуемой среде Jelastic:

  1. Войдите в свою панель JCA как пользователь с правами администратора и перейдите в   раздел Marketplace, используя главное меню слева.

image04

Оказавшись внутри, разверните   список « Добавить» в верхней панели и выберите параметр «  Надстройка»  .

  1. В открытом редакторе вставьте шаблон общего кода следующей структуры:
{
    "jpsType": "update",
    "jpsVersion": "0.3",
    "application": {
     "name": "package_name",
     "logo": "logo_url",
     "type": "java",
     "onInstall": {
         "executeShellCommands": {
             "nodeType": "tomcat7",
             "commands": [
                     custom_code
             ]
         }
     }
    }
}

Выделенные параметры должны быть заменены соответствующими данными — здесь вам нужно определить общую информацию о вашем пакете и указать операции, которые он должен выполнять:

    • имя_пакета  — имя надстройки, которое будет называться на панели пользователя (например,  Jenkins Configurations )
    • logo_url  — ссылка на изображение, которое будет использоваться в качестве значка пакета (вы можете использовать наш по умолчанию, скопировав и указав  этот URL )
    • custom_code  — список команд оболочки, разделенных запятыми, которые будут запускаться на устройстве дополнения

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

Составление сценария

В нашем примере инструмент интеграции Jenkins устанавливается поверх  Tomcat 7 , поэтому все используемые команды будут основаны на его спецификациях. Мы намерены автоматизировать процесс с помощью сценариев следующих операций:

  • Загрузка скриптов, необходимых для настройки заданий.
  • Конфигурирование самого Дженкинса.
  • Создание и связывание заданий для автоматического ведения приложения в течение жизненного цикла.

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

Примечание.  Ниже приведен пример кода, который необходимо изменить в соответствии со спецификой вашего приложения. Чтобы убедиться, что это было сделано правильно и все действия были правильно написаны, мы рекомендуем провести предварительную проверку вашего кода. Это можно сделать путем создания отдельной среды с той же топологией, для которой создается ваше дополнение (например,  Tomcat 7  с  приложением Jenkins , развернутым в нашем случае) и выполнением скорректированных команд непосредственно внутри контейнера вашего вычислительного узла с  использованием SSH . Если вам нужна помощь в этом, обратитесь к полному руководству по  дополнению DevOps для Jenkins Устранение неполадок, который дополнительно включает в себя описания ожидаемых результатов для каждой из представленных операций.

Итак, давайте покажем, как можно легко выполнить вышеупомянутые предложенные процессы с помощью соответствующих параметров облачных сценариев. Впоследствии все они должны быть вставлены вместо   параметра custom_code в примере манифеста, в том же порядке, в котором они описаны ниже.

  1. Вот первая часть скрипта, которую мы предлагаем создать:
“mkdir /opt/tomcat/demo“,

“cd /opt/tomcat/demo”,

“echo ENV_NAME= > /opt/tomcat/demo/variables”,

“curl -fsSL file_url -o install.sh“,

“curl -fsSL file_url -o transfer.sh“,

“curl -fsSL file_url -o migrate.sh“,

“curl -fsSL file_url -o runtest.sh“,

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

  • / opt / tomcat / demo  — полный путь к папке, где будет храниться вся информация о ваших скриптах (мы будем использовать  демо , но вы можете создать и использовать любой другой желаемый каталог — просто не забудьте указать правильный путь везде во всем вашем коде)
  • curl -fsSL  file_url  -o  file_name  — эта команда инициирует загрузку файла внутри контейнера; для этого примера нам потребуются следующие скрипты:

    • install.sh  — автоматически регистрируется как указанный пользователь и создает новую среду с топологией, установленной согласно файлуманифестаJelastic
    • transfer.sh  — передает в собственность окружения на указанный пользователем на основе среды передающей функции
    • migrate.sh  — перемещает среду в указанный аппаратный набор (группа hardnode)
    • runtest.sh  — в нашем примере он имитирует тестирование в демонстрационных целях, поэтому мы не предоставляем его код. При необходимости создайте свой собственный в соответствии со спецификой вашего приложения и назначьте его загрузку вместе с остальными сценариями.

Обратите внимание,  что перед применением каждый из шаблонов сценариев, связанных выше, должен быть дополнительно настроен путем замены следующих параметров в соответствии с настройками вашей платформы:

  • / path / to / scripts /  — тот же путь, который вы указали выше ( / opt / tomcat / demo  в нашем случае)
  • {cloud_domain}  — ваше доменное имя в Jelastic Platform
  • {JCA_dashboard_appID}  — ваша приборная панель ID, которые можно было бы рассматривать в  Platform.DASHBOARD_APPID  параметра в  JCA> О  разделе
  • {JCA_appstore_appID}  — идентификатор магазина приложений, указанный в том же разделе (  параметр Platform.APPSTORE_APPID )
  • {url_to_manifest}  — ссылка на файл манифеста Jelastic, созданный в соответствии с нашей  документацией  (мы будем использовать тот  же,  что и раньше — он устанавливает два сервера приложений Tomcat, на которых работает балансировщик нагрузки NGINX)

Кроме того, 3-я строка определяет создание   файла переменных вместе с загруженными сценариями, предназначенными для дальнейшего хранения автоматически сгенерированного имени для сред с различными версиями вашего приложения.

  1. Вторая часть кода удалит все существующие (то есть автоматически установленные во время первоначального развертывания инструмента) плагины Jenkins, чтобы предотвратить проблемы несовместимости или несоответствие их версий с будущими конфигурациями:
“rm -rf /opt/tomcat/temp/.jenkins/plugins”,

  1. После этого вам нужно перейти в основной   каталог .jenkins и добавить необходимые плагины и файлы конфигурации в интегратор Jenkins вместо удаленных, загрузив и распаковав соответствующий   архив plugins.zip .
“cd /opt/tomcat/temp/.jenkins/”,

“curl -fsSL file_url -o plugins.zip“,

“unzip -o plugins.zip >/dev/null 2>&1″,

Мы рекомендуем использовать  пакет, который  мы подготовили для этого примера, который уже содержит все необходимые модули. Тем не менее, вы можете дополнить его с другими плагинами , если это необходимо или просто упаковать свой собственный архив почтового индекса — в этом случае, обратите внимание , что есть несколько обязательных инструментов она должны состоять из (а именно:  SCM API плагиновGIT плагинGIT клиент плагинEnvironment File Plugin ) и все они должны быть помещены в  папку плагинов внутри архива.

  1. Следующий раздел кода загружает и извлекает другой требуемый пакет ( jobs.zip ), который установит задания Jenkins в соответствии с данными внутри.
“curl -fsSL file_url -o jobs.zip“,

“unzip -o jobs.zip >/dev/null 2>&1″,

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

Создать среду> Построить и развернуть> Тесты разработчика> Миграция в QA> Тесты QA> Миграция в производство

Обратите внимание,  что если вы используете свой собственный путь к папке сценариев, вам нужно отредактировать   задание Build and Deploy в нашем примере пакета, так как оно содержит определенное расположение файла внутри этого каталога:

<filePath>/opt/tomcat/demo/variables</filePath>

Все остальное может оставаться как есть, однако вы также можете отредактировать его или добавить свои собственные задания, если это необходимо.

5. Наконец, определите перезапуск сервера, чтобы применить все выполненные конфигурации.

“sudo /etc/init.d/tomcat restart >/dev/null 2>&1″

Будучи объединены вместе, все эти части кода будут автоматически выполнять практически все необходимые конфигурации Jenkins.

Таким образом, теперь вы можете поместить их в соответствующий   раздел манифеста команд, как это было предложено выше — вы получите нечто похожее на следующее:

image03

Нажмите кнопку «  Сохранить»,  чтобы завершить работу, и добавьте свое дополнение в список уже доступных установок.

Включение дополнения

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

image09

Теперь все готово, поэтому давайте просто посмотрим, насколько быстрой и простой становится реализация нашего подхода DevOps.

Новый опыт DevOps

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

  1. Наведите указатель мыши на   узел Tomcat 7 и щелкните появившийся   значок надстроек, чтобы отобразить вкладку с тем же именем и списком подходящих подключаемых модулей.

image08

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

  1. Дождитесь успешного завершения процесса и получите доступ к панели управления Jenkins (т. Е.  Откройте  свою среду  в браузере ).

image10

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

  1. Теперь вам нужно немного настроить каждое из этих действий, а именно:
  • укажите ссылку на хранилище с вашим проектом для   задания   Build and Deploy
  • установить правильные учетные данные в окне «  Выполнить»  для остальных заданий

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

image02

Примечание.  В качестве примера для данного руководства мы используем 

  • {dev_user} @ example.com  — логин (адрес электронной почты)  учетной записи пользователя dev 
  • {пароль}  — пароль пользователя, указанный выше
  • {cloud_domain}  — доменное имя вашей платформы Jelastic
  1. Последнее, что осталось сделать, — это связать запуск первого задания из нашего цикла (т.  Е. Создание среды ) с действием фиксации, которое произошло в хранилище. Как вы уже знаете из предыдущих руководств, это можно сделать с помощью   опции Webhook — вот напоминание о рабочем процессе (например, с   настройками репозитория GitHub ):

image01

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

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