hostprofi.ru
Подобрать хостинг
Термин·буква J

Jenkins

краткое определение

Сервер непрерывной интеграции с 1800+ плагинами для автоматизации сборки, тестирования и деплоя.

Jenkins — сервер непрерывной интеграции и доставки с открытым исходным кодом. Один из наиболее распространённых CI/CD-инструментов в корпоративной среде. Поддерживает более 1800 плагинов для интеграции с любым инструментом разработки. Управляется через веб-интерфейс или Jenkinsfile (Pipeline as Code).

Как работает

Jenkins разворачивается как Java-приложение (WAR-файл) на сервере. Master-контроллер управляет очередью задач и агентами (nodes). Агенты — отдельные машины или Docker-контейнеры, выполняющие непосредственную сборку. Jenkins-агент может работать на Linux, Windows, macOS. Master делегирует задачи доступным агентам по метками (labels).

Pipeline описывается в Jenkinsfile на Groovy DSL:

pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                sh 'docker build -t myapp .'
            }
        }
        stage('Test') {
            steps {
                sh 'docker run myapp npm test'
            }
        }
        stage('Deploy') {
            when { branch 'main' }
            steps {
                sshagent(['deploy-key']) {
                    sh 'ssh deploy@server "docker pull myapp && docker compose up -d"'
                }
            }
        }
    }
    post {
        failure {
            telegramSend("Build failed: ${env.JOB_NAME} #${env.BUILD_NUMBER}")
        }
    }
}

История

Jenkins создан Кохсукэ Кавагути в Sun Microsystems в 2004 году под именем Hudson. В 2011 году после поглощения Sun компанией Oracle большинство разработчиков проголосовали за форк проекта под именем Jenkins. Oracle оставила за собой Hudson. Jenkins быстро занял лидирующую позицию: 300 000+ активных инсталляций к 2023 году. Declarative Pipeline (2016) упростил написание Jenkinsfile для разработчиков без знания Groovy.

Плагины Jenkins

Богатство экосистемы — главное преимущество Jenkins. Популярные плагины: Docker (запуск агентов в контейнерах), Kubernetes (динамические агенты в k8s-кластере), Blue Ocean (современный UI с визуализацией пайплайна), Credentials (безопасное хранение секретов), GitHub / GitLab (webhook-триггеры и статусы PR).

Jenkins vs GitHub Actions

Jenkins — self-hosted, полный контроль, бесплатно (только стоимость сервера), сложная первоначальная настройка. GitHub Actions — hosted (бесплатные минуты для публичных репо, платно для приватных), простой YAML-формат, нет своей инфраструктуры. Для команд с приватным кодом и специфическими требованиями Jenkins на VPS выгоднее. Для open-source и стандартных стеков GitHub Actions — быстрее старт.

На что обращать внимание

Jenkins требует регулярных обновлений: уязвимости в Jenkins и плагинах находят регулярно. Настройте UFW — Jenkins-порт (8080) не должен быть доступен из интернета, только через VPN или SSH-туннель. Очистка workspace и Docker-образов: без настроенной ротации диск заполняется за недели. Мониторинг Jenkins через Grafana + Prometheus Jenkins-метрики — длина очереди, время выполнения, частота ошибок.

Хранение артефактов

Jenkins сохраняет артефакты сборки (JAR, ZIP, Docker-образы) через директиву archiveArtifacts в Jenkinsfile. Для долгосрочного хранения интегрируйте с Nexus или Artifactory — менеджерами репозиториев. Docker-образы публикуйте в Docker Hub или GitLab Container Registry:

stage('Push Image') {
    steps {
        withCredentials([usernamePassword(credentialsId: 'dockerhub')]) {
            sh 'docker push myuser/myapp:${BUILD_NUMBER}'
        }
    }
}

Нумерация сборок через BUILD_NUMBER — уникальный идентификатор каждого запуска пайплайна, используйте как тег Docker-образа для трассируемости деплоев. Интеграция с webhook от GitLab позволяет запускать сборку при пуше без polling каждые N секунд.

Другие термины