Что такое Jenkins?

Ответ

Jenkins — это open-source сервер для автоматизации, предназначенный для реализации практик CI/CD (Continuous Integration и Continuous Delivery/Deployment). Он позволяет автоматизировать сборку, тестирование, развертывание и другие этапы жизненного цикла ПО.

Ключевые возможности:

  • Планирование задач (Jobs/Pipelines): Запуск по расписанию, по событию (например, push в Git) или вручную.
  • Масштабируемость: Работа с агентами (nodes) для распределения нагрузки.
  • Расширяемость: Огромная экосистема плагинов для интеграции с Git, Docker, JIRA, Slack и др.
  • Pipeline как код: Определение сложных процессов через Jenkinsfile (декларативный или скриптовый синтаксис).

Пример Jenkinsfile (декларативный стиль):

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') {
            when {
                branch 'main'
            }
            steps {
                sh './deploy.sh'
            }
        }
    }
}

Ответ 18+ 🔞

Ну, слушай, вот есть такая штука — Jenkins. Представь себе этакого цифрового раба, который, если его правильно настроить, будет за тебя всю хуйню делать. А открытый он, то есть, бесплатный, что уже хорошо. Суть его жизни — это CI/CD, что расшифровывается как «Непрерывная Интеграция и Поставка/Развертывание». Короче, он автоматизирует всю эту канитель со сборкой, тестами и выкаткой твоего кода в прод, чтобы ты не делал это руками, как последний лох.

Что он умеет, этот зверь:

  • Задачи (Jobs/Pipelines) планировать: Можешь сказать ему «собирай каждую ночь» или «как только я залью код в Git — сразу начинай». А можешь просто пнуть его ногой вручную, когда захочешь.
  • Масштабироваться, сука: Если один сервер не тянет, он может работу раскидать по куче других машин-агентов. Овердохуища мощности.
  • Расширяться через плагины: Это его главная фишка. Хочешь слать уведомления в Slack? Плагин. Работать с Docker? Плагин. Интегрироваться с чем угодно? Правильно, плагин. Их там дохуя.
  • Pipeline как код: Вся логика сборки пишется в файлик Jenkinsfile. Это гениально и пиздато, потому что его можно хранить в Git вместе с проектом и версионировать. Бывает в двух стилях: декларативном (попроще) и скриптовом (где можно поизвращаться).

Вот, смотри, как это примерно выглядит (декларативный стиль):

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') {
            when {
                branch 'main'
            }
            steps {
                sh './deploy.sh'
            }
        }
    }
}

Видишь? Красота. Сначала собирает, потом тесты гоняет (и всегда, блядь, сохраняет отчеты, даже если всё ебнулось), а на деплой замахивается только если работаем с веткой main. Всё чётко, без лишней суеты. А главное — автоматически, ёпта. Сиди себе, кофе пей, пока этот трудяга пашет.