Что такое Jenkins и для чего он используется?

«Что такое Jenkins и для чего он используется?» — вопрос из категории DevOps, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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-практик, позволяя ускорить выпуск релизов и повысить их качество.