Jenkins

Jenkins — программная система с открытым исходным кодом на Java, предназначенная для обеспечения процесса непрерывной интеграции программного обеспечения. Позволяет автоматизировать ту часть процесса разработки программного обеспечения, в котором уже не обязательно участие человека, обеспечивая функции непрерывной интеграции. Работает в сервлет-контейнере, таком например, Apache Tomcat.

Для чего нужен Jenkins:

  • Автоматизация сборки. Разработчики загружают код в репозиторий (напр., GitHub), а Jenkins автоматически компилирует его.
  • Тестирование. Каждый новый кусочек кода можно сразу прогонять через тесты, чтобы избежать ошибок.
  • Развертывание. Готовое приложение можно сразу выкатывать на сервер, не тратя время на ручные операции.
  • Гибкость. Jenkins поддерживает тысячи плагинов, позволяющих настроить процесс под конкретные задачи.

Как работает Jenkins?

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

Принцип работы:

  1. Разработчик вносит изменения в код, затем отправляет их в какой-либо репозиторий (Git, GitHub, Bitbucket).
  2. Jenkins отслеживает изменения, автоматически запускает процесс сборки.
  3. Во время сборки выполняются тесты, проверяющие работоспособность кода.
  4. После того, как тесты пройдены успешно, код упаковывается в артефакт (напр., Docker-образ).
  5. Jenkins развертывает обновление на тестовом или боевом сервере.

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

Непрерывная разработка состоит из двух частей:

  • CI (continuous integration) — непрерывная интеграция. Идея в том, что все новшества в коде сразу добавляются в мастер-ветку проекта.
  • CD (continuous delivery) — непрерывная доставка. Результаты работы программистов доставляются на сервер приложения или в тестовую среду, где их проверяют тестировщики.

Оба понятия обычно используются вместе, отсюда и название подхода — CI/CD.

Особенно эффективен Jenkins в связке с Docker. Docker позволяет контейнеризировать ваши приложения, создавая согласованные среды для разработки, тестирования и производства. Jenkins, в свою очередь, помогает автоматизировать такие задачи, как сборка, тестирование и развертывание вашего кода.

Связка
Jenkins и Kubernetes  — это мощное и современное решение для организации полного цикла непрерывной интеграции и доставки (CI/CD). Jenkins отвечает за автоматизацию процессов CI/CD, а Kubernetes предоставляет масштабируемую и гибкую среду для развертывания и управления приложениями.

Основные сценарии использования связки

Существует два основных подхода к интеграции:

  1. Развертывание Jenkins в Kubernetes: Сам Jenkins (мастер и агенты) запускается как набор подов внутри кластера Kubernetes. Это обеспечивает высокую доступность, отказоустойчивость и масштабируемость самого инструмента CI/CD.
  2. Jenkins вне кластера управляет развертыванием в Kubernetes: Классический вариант, при котором Jenkins установлен на отдельном сервере (или виртуальной машине), но использует инструменты (например, kubectl, Helm) для взаимодействия с удаленным кластером Kubernetes и развертывания приложений
Ключевые преимущества использования
  • Масштабируемость: Kubernetes может автоматически запускать агенты Jenkins в виде подов по требованию (когда запускается сборка) и удалять их после завершения задачи.
  • Изоляция сборок: Каждая задача CI/CD выполняется в чистом, изолированном контейнере (поде), что исключает влияние одной сборки на другую.
  • Эффективное использование ресурсов: Ресурсы кластера используются только тогда, когда это необходимо для выполнения конкретной задачи, что оптимизирует затраты.
  • Декларативное управление: Используя “инфраструктуру как код” (IaC), конфигурацию Jenkins и процессов развертывания можно хранить в Git-репозиториях, обеспечивая воспроизводимость. 
Необходимые инструменты и плагины:
Для реализации связки потребуются: 
  • Плагин Kubernetes: Основной плагин для Jenkins, который позволяет динамически создавать агентов Jenkins в кластере Kubernetes.
  • Docker: Используется для создания образов приложений.
  • kubectl CLI: Инструмент командной строки для взаимодействия с API Kubernetes.
  • Helm или ArgoCD: Инструменты для управления развертыванием приложений в кластере с использованием шаблонов (Helm-чарты) или подхода GitOps. 
Типовой рабочий процесс (CI/CD Pipeline):
  1. Разработчик отправляет код в репозиторий (например, Git, GitHub).
  2. Jenkins обнаруживает изменения и запускает пайплайн.
  3. Jenkins динамически запрашивает у Kubernetes запуск пода-агента для выполнения задачи.
  4. Внутри пода-агента происходит сборка приложения, его тестирование и создание Docker-образа.
  5. Образ пушится в реестр контейнеров (например, Docker Hub, GCR).
  6. Jenkins (или другой инструмент, например, ArgoCD) обновляет манифесты Kubernetes (например, Helm-чарт или YAML-файл) с новым тегом образа и применяет их к кластеру, запуская процесс развертывания.
  7. Kubernetes управляет обновлением приложения, обеспечивая его доступность и масштабирование. 

Обсуждение закрыто.