Что такое Дженкинс?

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

1. Запрет на работу во фристайле

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

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

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

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

3. Синий океан

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

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

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

Некоторые примеры этого могут быть

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

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

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

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

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

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

7. Предоставление агентов как часть конвейера

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