В общих чертах, Jenkins - это бесплатная система сборки с открытым исходным кодом, обладающая большой поддержкой сообщества благодаря различным плагинам, разработанным в течение многих лет. Она отлично масштабируется, а благодаря созданию собственных Groovy-скриптов невероятно расширяема. Здесь я хочу поделиться советами из моего опыта использования и поддержки нескольких экземпляров Jenkins в различных проектах.
Насколько я понимаю, задания Jenkins Freestyle не должны существовать. Это очень устаревший способ написания конвейера сборки, а пользовательские или сложные функциональные возможности зависят от скриптов, развертываемых вручную на узле Jenkins Controller. По многим причинам это ужасный способ реализации:
Плохие потоки итераций - вы либо редактируете скрипты непосредственно на контроллере, пока он работает, либо фиксируете их в системе управления исходным кодом, а затем переносите на контроллер. Это очень медленно и очень рискованно. Нет безопасного способа протестировать это в производственной среде и нет ветвления. Вы должны учитывать каждый другой проект на экземпляре Jenkins, что может привести к очень запутанному коду для сравнения имен проектов перед применением настроек или процессов, специфичных для конкретного проекта.
Альтернативой свободным заданиям являются скриптовые и декларативные конвейеры, оба из которых способны использовать общие библиотеки Jenkins. Это пользовательские библиотеки, которые Jenkins может проверить вместе с кодом вашего проекта, чтобы предоставить дополнительные возможности вашему конвейеру сборки. Это может упростить выполнение сложных пользовательских задач, требующих совместного использования в нескольких проектах. Однако это, естественно, повышает риск для таких проектов, поскольку любое изменение в коде общего конвейера повлияет на все проекты, использующие этот код, поэтому вносить изменения здесь следует очень осторожно. Если возможно, создайте среду для тестирования этих изменений.
Интерфейс Blue Ocean, доступный в виде плагина для Jenkins, представляет собой более чистый пользовательский интерфейс для Jenkins, и хотя он не предлагает администраторам всего, что им нужно, он идеально подходит для большинства конечных пользователей. Визуальное представление конвейера сборки, зависимых этапов и параллельных этапов значительно облегчает понимание того, где и почему произошел сбой. При необходимости можно легко переключаться между интерфейсами и создавать ссылки, направляющие пользователей к нужному интерфейсу.
Вместо того, чтобы иметь большие объемные задания, содержащие все шаги и различные конфигурации, необходимые вашему проекту, или использовать их, разбейте их на более мелкие конвейеры, которые можно использовать повторно или соединить вместе для создания полного конвейера.
Например:
С помощью приведенных выше примеров конвейеров вы можете встроить в свой конвейер большое количество возможностей и сократить количество раз, когда вы переписываете, например, простую стадию развертывания.
Jenkins можно развертывать разными способами, но мне больше всего нравится Docker, это более надежный способ, и вы получаете все преимущества Docker, такие как автоматический перезапуск. Еще одним огромным преимуществом развертывания с помощью Docker является то, что вы можете создавать собственные образы на основе Jenkins, добавляя свои собственные конфигурации заданий и используя Config As Code, чтобы получить свой собственный экземпляр Jenkins, полностью готовый к работе.
Проще говоря, чем больше времени мастер выполняет работу для ваших конвейеров сборки, тем меньше времени у него остается на предоставление контента (например, веб-страниц и api ответов для ваших пользователей) и управление агентами сборки. Стремитесь запускать каждую часть вашего конвейера сборки на агентах Jenkins, и у вас будет гораздо более отзывчивый экземпляр.
В продолжение предыдущего пункта, при использовании агентов не полагайтесь на то, что программное обеспечение и инструменты будут установлены на машину вручную. Установите необходимые инструменты и программное обеспечение в процессе сборки, в лучшем случае они уже настроены и установка будет пропущена, в худшем - придется потратить дополнительное время на инициализацию ресурсов. В любом случае, вы сможете быстро расширить свою платформу для сборки благодаря низким накладным расходам на ручную настройку, и это открывает возможность подключения к облачным платформам, таким как Amazon EC2, для автоматического масштабирования по мере необходимости.