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 секунд.