Jenkins: универсальный помощник в CI/CD

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

Распределенная архитектура: Jenkins Master и Jenkins Slave

Jenkins использует распределенную архитектуру (Distributed Architecture) для управления распределенными билдами. В такой архитектуре Jenkins Master и Jenkins Slave работают по протоколу TCP/IP. 

Основные функции Jenkins Distributed Architecture:

  • Периодическая проверка репозитория Git на наличие изменений в коде
  • Тестирование в окружениях через нескольких Slaves
  • Создание отчетов Slaves по запросу Master

Распределенная архитектура используется, потому что для некоторых задач одного сервера недостаточно. Например, тесты билдов в нескольких окружениях невозможно выполнить на одном сервере. Если регулярно билдить масштабные проекты, один Jenkins Server не выдержит рабочую нагрузку.

Интеграция с GitHub

Интеграция GitHub с Jenkins имеет встроенную поддержку в базовый пакет и пакет для организаций. Благодаря концепции Pipeline-as-Code на GitHub можно проверить процесс сборки, код команды и Jenkins Pipeline Parameters, управлять версиями и готовить код к аудиту. 

Как это работает? Jenkins проверяет аккаунт компании на GitHub и создает в пайплайне Jenkins Job для каждого репозитория. В репозитории размещен текстовый файл, описывающий процесс создания, тестирования и развертывания проекта в Jenkins. Сразу после нового пулреквеста система выполняет Jenkins Job и возвращает статус (failed/succeeded). Интеграция GitHub и Jenkins позволяет запускать автотесты при каждой проверке и находить баги на ранней стадии. Jenkins Git Plugin включает основные операции проектов. После установки Jenkins Git Plugin может собирать данные, извлекать, проверять, объединять и “пушить” их в репозитории.

Кстати, если работаете с Bitbucket, то интеграция Jenkins Bitbucket тоже возможна через отдельный плагин.

jenkins slave

Непрерывная интеграция в Jenkins и Docker Compose

Даже начинающий DevOps знает, что Docker Compose – один из самых ходовых инструментов для работы с приложениями. А интеграция Jenkins с Docker Compose  – удобный помощник в качественной реализации CI/CD. Такой подход хорошо работает для проектов, написанных на Java, которые реализуются в окружении Jenkins. 

Приложения по типу Jenkins загружаются как read-only “images” (в нашем случае – Docker Jenkins Image). Каждый из образов работает как контейнер. Плагин Docker Compose Build Step запускает команды docker-compose как этапы билда. В процессе использования можно настроить Jenkins Pipeline Parameters и структурировано работать с variables и values в командах Docker. В отличие от dockerfile, вы получаете доступ к environment variables и проходите их через команду. 

С помощью Docker Compose проще управлять несколькими контейнерами, сетями и большими объемами, чем через команду docker run. Docker Compose доступен везде, где установлен Docker. А для использования в Jenkins нужно только установить плагин Docker Compose Build Step.

jenkins docker compose

TeamCity vs Jenkins: что лучше для CI/CD?

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

Сравнивать TeamCity vs Jenkins можно по разным характеристикам. Например, установка и конфигурация, кастомизация и масштабирование, система плагинов, облачная интеграция, поддержка сообщества и др. Для примера рассмотрим три параметра сравнения.

Установка и конфигурация

Для установки TeamCity нужно только загрузить соответствующий пакет и сделать все по инструкции. На официальном сайте доступна нужная документация. Jenkins устанавливается из коробки на OS X, Windows и Unix-системах. Если у вас уже есть Java and Apache TomCat, установка пройдет в три шага. Конфигурация выполняется через веб-интерфейс. В целом, установка так же проста, как и у TeamCity.

Кастомизация и расширяемость

Оба приложения расширяются через RESTful API. В TeamCity можно использовать сервисные сообщения в билде скриптов и для создания плагинов, используя Open API. Удаленный доступ API Jenkins доступен с XML, Python, and JSON. API используется для получения информации для нового билда или создания копий джоб.

Система плагинов

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

Другие интеграции: Ansible Jenkins, Groovy Jenkins, Jenkins Kubernetes

С какими еще системами дружит Jenkins? Обязательно упомянем Ansible – инструмент управления конфигурациями и развертыванием приложений. Вместе Ansible и Jenkins быстрее автоматизируют задачи, контролируют слияние кода и релизы. В паре с Ansible Jenkins Declarative Pipeline работает лучшим образом по принципам CI DevOps.

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

ansible jenkins

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

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

CI/CD (Continuous Integration/Continuous Delivery) Pipeline – основа современного окружения DevOps. А Jenkins – базовый инструмент реализации непрерывной интеграции и непрерывной доставки. Jenkins – это не CI или CD, это комплексный запуск пайплайнов и автоматизация деплойментов. CI/CD с Jenkins – оптимальное решение для модернизации и ускорения цикла доставки программного кода. Принцип CI/CD похож на конвейер, и возможности Jenkins используют на всех этапах софтверной разработки

Jenkins – инструмент DevOps и гибкое решение для реализации CI/CD (Continuous Integration/Continuous Delivery). Идея Jenkins состоит в объединении кода отдельных разработчиков в одну ветку по несколько раз в день. При этом происходит непрерывное тестирование для раннего обнаружения ошибок в программном коде. Благодаря конвейеру Jenkins код находится в состоянии, готовому к деплойменту. Jenkins теперь не только удобный тул CI/CD, но и некий стандарт в управлении доставкой кода.

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

  • Позволяет масштабировать узлы и равномерно распределяет нагрузку
  • Программа совместима со всеми операционными системами и версиями
  • Простая установка и конфигурирование
  • Распределяет операционную нагрузку на несколько машин 

Jenkins помогает командам экономить время, автоматизируя тестирование.

DevOps и Agile часто связывают, хотя это разные подходы с разными целями. Методология Agile нацелена на постепенные изменения и разделение процессов, в том числе и разработки, на этапы. В результате завершения таких этапов код готов для доставки на production раз в пару недель. Задача DevOps – это взаимодействие команды и ускорение доставки кода на всех этапах программной разработки. DevOps и Agile часто используются вместе, поэтому в какой-то мере можно утверждать, что Jenkins используется в Agile. Но если быть точными, Jenkins – это все же инструмент автоматизации, который используется в реализации принципов DevOps.



Непрерывная доставка в Jenkins реализуется через конвейер (Pipeline). Пример простого конвейера Jenkins: сборник, статистический анализ, модульное тестирование, интеграционное тестирование, развертывание. Как сделать подобный Pipeline в Jenkins? Для начала нужно установить последнюю рабочую версию Jenkins и перейти к следующим шагам:

  • запустить файл -jar jenkins.war (с помощью java)
  • разблокировать программу исходным паролем администратора
  • установить нужные плагины.

Создание сценария конвейера:

  • запускаем новую job и заполняем подробную информацию об этапах работы
  • указываем дополнительные опции и выбираем Pipeline script
  • клонируем репозиторий и меняем каталог на нужный проект.

Далее пойдут модульные и интеграционные тесты и развертывание приложения. После создания Jenkins job сохраняем сценарий.

В Jenkins доступны разные виды работ/задач (jobs). Простой пример – Jenkins Pipeline. Такой тип задачи описывает нужный сценарий, например, сборки приложения или деплоя. Описываем задачу в Jenkinsfile, который хранится в репозитории проекта.

Чтобы создавать разные виды задач, можно использовать утилиту Jenkins job builder (на Python) или DSL Plugin (на) Domain Specific Language. Есть другие плагины, которые позволяют просто и гибко управлять работами в Jenkins.

Чтобы запустить параллельные задания в Jenkins, в настройках job нужно выбрать опцию Execute concurrent builds if necessary. Jenkins настраивает и запускает несколько билдов одновременно (конечно, если остальные параметры конфигурации настроены корректно). Параллельные задания удобны для билдов и тестов, которые занимают много времени. Также мультизадачность хорошо работает на параметризированных сборках, чье отдельные исполнители задействованы независимо. 

Параллельные задачи работают не для всех jobs. Исключением могут быть случаи с монополией на ресурс, например, базу данных, или задачи, в которых Jenkins используется вместо Cron.

CI (Continuous Integration) – подход в программном инжиниринге, который обеспечивает непрерывное, по несколько раз в день, слияние рабочих копий кода в общую ветку. Jenkins – простой, удобный и гибкий инструмент CI. В Jenkins реализация выполняется через Jobs, которые описываются в виде сценариев в Jenkinsfile. Можно описать, как будет проходить билд (сборка), тестирование, развертывание.

error: Контент защищен.