7 лучших практик использования в системе сборки Jenkins
8291

7 лучших практик использования в системе сборки Jenkins


Что такое Jenkins?

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

jenkins

1. Никаких свободных заданий

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

Плохие потоки итераций - вы либо редактируете скрипты непосредственно на контроллере, пока он работает, либо фиксируете их в системе управления исходным кодом, а затем переносите на контроллер. Это очень медленно и очень рискованно. Нет безопасного способа протестировать это в производственной среде и нет ветвления. Вы должны учитывать каждый другой проект на экземпляре Jenkins, что может привести к очень запутанному коду для сравнения имен проектов перед применением настроек или процессов, специфичных для конкретного проекта.

2. Используйте общие библиотеки

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

3. Blue Ocean

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

4. Небольшие модульные задания

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

Например:

  • Deploy to play store - задание для развертывания apk в play store, это задание может быть использовано любым проектом Android, который у вас есть, путем установки параметров для приема идентификаторов приложений, APK, учетных данных и т.д.
  • Build My Android Project - конвейер для сборки Android, специфичный для конкретного проекта, он также может использовать некоторые общие библиотеки для выполнения более общих шагов.
  • Build project - этот конвейер можно рассматривать как дирижер или оркестратор других конвейеров, он существует для нескольких целей, запуска матрицы сборок на всех платформах по таймеру, предоставления простого способа для конечного пользователя начать сборку на разных платформах и т.д.

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

5. Развертывание с помощью Docker

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

6. Избегайте работы по сборке на контроллере Jenkins

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

7. Обеспечение агентов как части конвейера

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

Получать оповещения о новых статьях:


Не нашли нужную статью? Предложите свою тему


Статьи по теме:


Что такое Terraform?
 7681  384