Jenkins — это инструмент с открытым исходным кодом для автоматизации сборки, тестирования и развертывания программного обеспечения, обеспечивающий полноценный CI/CD процесс.
От Hudson к Jenkins: история
Первоначально инструмент назывался Hudson. После поглощения Sun компанией Oracle возникли проблемы с торговой маркой. Проект был форкнут, получив название Jenkins.
Что такое CI/CD?
CI/CD подразумевает автоматизацию процесса: после загрузки кода в репозиторий он автоматически собирается, тестируется и развертывается на сервере с последующим отчетом о результатах.
Как работает Jenkins?
Jenkins работает следующим образом:
- Мониторинг репозитория: Jenkins постоянно проверяет репозиторий на наличие изменений.
- Сборка проекта: При обнаружении изменений, Jenkins запускает сборку. При ошибках разработчик получает уведомление.
- Тестирование: После успешной сборки код развертывается на тестовом сервере и запускаются автотесты. Результаты сообщаются разработчикам.
- Развертывание: При успешном прохождении тестов происходит развертывание на стейдж или продакшн.
Количество этапов может быть любым.
Архитектура Jenkins
Jenkins имеет распределенную архитектуру:
- Мастер (Контроллер): Главный сервер, отвечающий за планирование работ, проверку репозитория, выбор агента, мониторинг и отчетность.
- Агенты: Подчиненные сервера, выполняющие задания Мастера. Они могут работать на разных операционных системах, что позволяет оптимизировать сборку и тестирование. Использование агентов повышает производительность за счет балансировки нагрузки.
Настройка Jenkins
Настройка Jenkins возможна двумя способами:
- Графический интерфейс: Создаются Job — наборы задач, выполняющиеся последовательно. В настройках Job указывается репозиторий, параметры сборки, команды, этапы выполнения, деплой и многое другое.
- Jenkinsfile: Создается отдельный файл Jenkinsfile с описанием пайплайна и размещается в репозитории. Jenkins автоматически его подтягивает.
Jenkinsfile: декларативный подход
Jenkinsfile использует декларативный подход, описывая что нужно получить, а не как. Основные блоки:
- pipeline: главный блок.
- agent: указывает агент для выполнения (например, any, или конкретный лейбл, или контейнер Docker/Kubernetes).
- stages: блок, разделяющий работу на этапы (например, build, test, deploy).
- steps: скрипты, выполняющиеся на каждом этапе.
- post: блок, выполняющийся после завершения пайплайна (например, always, success, failure).
- when: условия выполнения блоков.
- environment: переменные окружения.
- parameters: параметры, выбираемые при запуске пайплайна (строка, число, булево, выбор из списка).
Jenkinsfile написан на Groovy. Доступен также scripted стиль.
Плагины Jenkins
Jenkins имеет обширную библиотеку плагинов, расширяющих его функциональность: интеграции с системами управления кодом, Jira, Kubernetes и другими сервисами; кастомизация интерфейса; улучшенная работа с пайплайнами; кастомизация сборок и тестирования; мониторинг и отчеты.
Альтернативы Jenkins
Существуют альтернативные CI/CD инструменты, такие как GitLab CI, TeamCity, CircleCI, Bamboo, GitHub Actions. Однако Jenkins остается одним из самых популярных.
CI и CD в Jenkins
Отнесение функционала Jenkins к CI или CD — вопрос контекста.