Ответ
Jenkins — это open-source сервер автоматизации с открытой архитектурой, основной инструмент для реализации практик CI/CD (Continuous Integration/Continuous Delivery/Deployment).
Основные задачи:
- Непрерывная интеграция (CI): Автоматическая сборка и тестирование кода при каждом коммите в репозиторий (Git, SVN).
- Непрерывная доставка/развертывание (CD): Автоматизация развертывания приложений в тестовые и production-окружения.
Ключевые возможности:
- Планирование задач (Jobs/Pipelines): Запуск по расписанию, по событию (веб-хук из Git) или вручную.
- Распределенные сборки: Управление агентами (нодами) для выполнения задач на разных машинах.
- Экосистема плагинов: Тысячи плагинов для интеграции с инструментами (Docker, Kubernetes, Maven, Gradle, Jira, Slack).
- Pipeline как код: Определение всего процесса сборки в виде кода (Jenkinsfile).
Пример Jenkinsfile (Declarative Pipeline):
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'mvn clean compile'
}
}
stage('Test') {
steps {
sh 'mvn test'
}
post {
always {
junit 'target/surefire-reports/*.xml' // Публикация отчетов
}
}
}
stage('Deploy to Staging') {
steps {
sh 'scp target/*.war user@staging-server:/opt/tomcat/webapps/'
}
}
}
}
Jenkins является центральным элементом DevOps-практик, позволяя ускорить выпуск релизов и повысить их качество.