Руководство по созданию задания Jenkins для создания и публикации образов в Docker Hub

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

В этой статье мы создадим задание Jenkins, которое:

  • Выводит удаленные ветки данного проекта
  • Компилирует код
  • Пакует код с помощью Docker
  • Публикует образ в Docker Hub

К концу этого урока у вас должно получиться что-то вроде следующего:

Создать работу в Jenkins

На главной странице Jenkins создайте новый элемент, нажав New Item:

Дайте вашему проекту имя и выберите вариант «Freestyle project» в качестве типа нового элемента.

Работа Jenkins в стиле« свободный стиль поддерживает простую непрерывную интеграцию, позволяя определять последовательные задачи в жизненном цикле приложения». - Дженкинс документация

Теперь вы должны попасть на страницу конфигурации вашего вновь созданного проекта.

Параметризуйте свой проект

Выберите «Этот проект параметризован», чтобы настроить входные параметры, которые вы хотите использовать для создания своего приложения:

Первый параметр, который мы хотим добавить, - это имя приложения. Щелкните ДОБАВИТЬ ПАРАМЕТР и выберите Параметр активного выбора. Назовем этот параметр app, он будет представлять приложение, которое мы хотим создать.

В этом руководстве мы жестко запрограммируем приложения, поэтому воспользуемся простейшим скриптом Groovy, который вы можете себе представить:

return ['first_application', 'second_application'] 

После того, как вы примените изменения, вы увидите, что раскрывающееся меню app заполнено указанными выше приложениями.

Затем мы хотим динамически получать ветки Git в зависимости от выбранного приложения. Для этого мы добавим дополнительный параметр «ветвь», который будет состоять из всех ветвей выбранного приложения.

Нажмите ДОБАВИТЬ ПАРАМЕТР и выберите Реактивный параметр активного выбора:

Плагин Active Choices используется в параметризованных фристайл-заданиях Jenkins для создания сценариев, динамических и интерактивных параметров заданий. Параметры Active Choices можно динамически обновлять и отображать в виде полей со списком, флажков, переключателей или виджетов с расширенным интерфейсом HTML . - Дженкинс Документация по активному выбору

Мы используем этот тип параметра, поскольку мы хотим отображать ветви в соответствии с выбранным именем приложения в предыдущем варианте «app». Для этого мы должны сказать Дженкинсу, что хотим сослаться на переменную «app». Добавьте «приложение» в опцию «Связанные параметры»:

А теперь давайте напишем Groovy! Выберите вариант «Groovy script» и вставьте приведенный ниже код в текстовое поле:

Объяснение:

  • list_branches - это команда, которую мы используем для вывода списка удаленных ветвей данного репозитория.
  • Команды awk и cut используются для извлечения определенного имени ветки из приведенной выше команды Git.
  • В строках 7–10 мы передаем команды по конвейеру для получения результата, разделяем для создания массива и, наконец, результата.

Последний параметр, который мы должны поддерживать, - это тег, который позволит нам узнать, какой тег у нас должен быть на нашем изображении. Для этого добавьте новый параметр типа String Parameter - простой вариант ввода произвольного текста. Назовите его «тег».

Создайте сценарий сборки

Теперь у нас есть вся необходимая информация для компиляции и сборки выбранного проекта.

Выберите «Выполнить оболочку» на этапе сборки:

Передайте следующий контент:

Объяснение:

  • Сначала клонируйте выбранное приложение.
  • Запустите команду сборки, чтобы скомпилировать исходный код.
  • Упакуйте код, используя предоставленный Dockerfile (в самом репозитории)
  • Опубликуйте изображение в хабе.

Примечание. Если два проекта построены одинаково, вы можете опустить условие и объединить их.

В зависимости от вашего инструмента сборки и исходного кода процесс может отличаться от описанного выше. Однако здесь важно понимать сам процесс, а не конкретные команды, которые нужно запустить.

Заключение

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