- Home »

Установка Jenkins на Ubuntu 24
Если работаете с DevOps или управляете командой разработки, то знакомство с Jenkins — это практически обязательный пункт. Особенно если у вас есть свой сервер на Ubuntu 24 и хочется настроить CI/CD процесс быстро и без лишних плясок. Сегодня разберём, как правильно поставить Jenkins на свежую Ubuntu 24, не наступив на грабли, которые ждут новичков на каждом шагу.
Статья будет полезна тем, кто хочет понять не только “как нажать кнопку”, но и разобраться в механизме работы, получить готовое решение с практическими примерами и сразу начать использовать Jenkins в боевых условиях.
Что такое Jenkins и зачем он нужен
Jenkins — это open-source сервер автоматизации, который помогает разработчикам интегрировать изменения в проекте и доставлять готовые решения пользователям. Проще говоря, это такой робот, который может автоматически собирать ваш код, тестировать его и деплоить на продакшен.
Основные возможности:
- Автоматическая сборка проектов при изменении кода
- Запуск тестов и проверок качества
- Автоматический деплой на staging и production
- Интеграция с Git, Docker, Kubernetes
- Уведомления в Slack, email, Telegram
- Масштабирование через агентов
Подготовка системы Ubuntu 24
Перед установкой Jenkins обязательно нужно подготовить систему. Ubuntu 24 из коробки не имеет всех необходимых компонентов, поэтому начинаем с базовой настройки.
Обновление системы
sudo apt update && sudo apt upgrade -y
Установка Java
Jenkins требует Java для работы. Рекомендую OpenJDK 17 или новее:
sudo apt install openjdk-17-jdk -y
java -version
Вывод должен показать что-то вроде:
openjdk version "17.0.8" 2023-07-18
OpenJDK Runtime Environment (build 17.0.8+7-Ubuntu-1ubuntu2~22.04)
OpenJDK 64-Bit Server VM (build 17.0.8+7-Ubuntu-1ubuntu2~22.04, mixed mode, sharing)
Установка Jenkins: два способа
Способ 1: Через официальный репозиторий (рекомендуется)
Самый надёжный способ — использовать официальный репозиторий Jenkins. Так вы будете получать обновления автоматически.
# Добавляем GPG ключ
curl -fsSL https://pkg.jenkins.io/debian/jenkins.io-2023.key | sudo tee \
/usr/share/keyrings/jenkins-keyring.asc > /dev/null
# Добавляем репозиторий
echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] \
https://pkg.jenkins.io/debian binary/ | sudo tee \
/etc/apt/sources.list.d/jenkins.list > /dev/null
# Обновляем список пакетов
sudo apt update
# Устанавливаем Jenkins
sudo apt install jenkins -y
Способ 2: Через snap
Более простой, но менее гибкий способ:
sudo snap install jenkins --classic
Лично рекомендую первый способ — больше контроля и возможностей для настройки.
Настройка и первый запуск
Запуск службы Jenkins
sudo systemctl start jenkins
sudo systemctl enable jenkins
sudo systemctl status jenkins
Служба должна показать статус “active (running)”.
Настройка фаервола
Jenkins по умолчанию работает на порту 8080. Открываем его:
sudo ufw allow 8080
sudo ufw status
Первичная настройка через веб-интерфейс
Открываем браузер и переходим на http://ваш-ip:8080
. Jenkins попросит ввести начальный пароль администратора.
Получаем пароль:
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
Скопируйте пароль и вставьте в форму. Дальше Jenkins предложит установить плагины — выбирайте “Install suggested plugins”. Это займёт несколько минут.
Безопасность и hardening
Настройка reverse proxy с Nginx
Запускать Jenkins напрямую на 8080 порту — не лучшая идея для продакшена. Лучше использовать Nginx как reverse proxy:
sudo apt install nginx -y
Создаём конфигурацию для Jenkins:
sudo nano /etc/nginx/sites-available/jenkins
Содержимое файла:
server {
listen 80;
server_name your-domain.com;
access_log /var/log/nginx/jenkins.access.log;
error_log /var/log/nginx/jenkins.error.log;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 90;
}
}
Активируем конфигурацию:
sudo ln -s /etc/nginx/sites-available/jenkins /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
SSL сертификат с Let’s Encrypt
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d your-domain.com
Практические примеры использования
Пример 1: Автоматическая сборка Node.js проекта
Создаём новый job типа “Pipeline” и добавляем следующий Jenkinsfile:
pipeline {
agent any
stages {
stage('Checkout') {
steps {
git branch: 'main', url: 'https://github.com/your-repo/app.git'
}
}
stage('Install Dependencies') {
steps {
sh 'npm install'
}
}
stage('Test') {
steps {
sh 'npm test'
}
}
stage('Build') {
steps {
sh 'npm run build'
}
}
stage('Deploy') {
steps {
sh 'rsync -av dist/ user@server:/var/www/app/'
}
}
}
post {
always {
cleanWs()
}
success {
echo 'Deployment successful!'
}
failure {
echo 'Build failed!'
}
}
}
Пример 2: Docker-based deployment
pipeline {
agent any
stages {
stage('Build Docker Image') {
steps {
script {
def image = docker.build("myapp:${env.BUILD_ID}")
}
}
}
stage('Push to Registry') {
steps {
script {
docker.withRegistry('https://registry.example.com', 'registry-credentials') {
image.push()
image.push("latest")
}
}
}
}
stage('Deploy to Kubernetes') {
steps {
sh 'kubectl set image deployment/myapp myapp=registry.example.com/myapp:${BUILD_ID}'
}
}
}
}
Полезные плагины
Список must-have плагинов для эффективной работы:
Плагин | Описание | Зачем нужен |
---|---|---|
Pipeline | Создание CI/CD пайплайнов как код | Основа современного Jenkins |
Git | Интеграция с Git репозиториями | Автоматический запуск сборок |
Docker | Работа с Docker контейнерами | Современный деплой |
Slack Notification | Уведомления в Slack | Мониторинг сборок |
Blue Ocean | Современный UI для пайплайнов | Визуализация процессов |
AnsiColor | Цветной вывод в логах | Удобство отладки |
Масштабирование и оптимизация
Настройка Jenkins агентов
Для больших проектов один Jenkins master может не справиться. Настраиваем агентов:
# На агенте
sudo useradd -m -s /bin/bash jenkins
sudo mkdir -p /home/jenkins/.ssh
sudo chown jenkins:jenkins /home/jenkins/.ssh
В веб-интерфейсе Jenkins: Manage Jenkins → Manage Nodes → New Node
Backup и восстановление
Создаём скрипт для бэкапа:
#!/bin/bash
BACKUP_DIR="/backup/jenkins"
JENKINS_HOME="/var/lib/jenkins"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR
sudo service jenkins stop
sudo tar -czf $BACKUP_DIR/jenkins_backup_$DATE.tar.gz -C $JENKINS_HOME .
sudo service jenkins start
# Удаляем старые бэкапы (старше 7 дней)
find $BACKUP_DIR -name "jenkins_backup_*.tar.gz" -mtime +7 -delete
Сравнение с альтернативами
Решение | Плюсы | Минусы | Лучше для |
---|---|---|---|
Jenkins | Много плагинов, гибкость, бесплатно | Сложная настройка, требует обслуживания | Сложные корпоративные процессы |
GitLab CI | Интегрированность с Git, простота | Менее гибкий | Команды, использующие GitLab |
GitHub Actions | Облачность, интеграция с GitHub | Привязка к GitHub, платность | Open source проекты |
TeamCity | Мощный UI, хорошая производительность | Платный, сложность | Enterprise разработка |
Мониторинг и отладка
Логи и диагностика
Основные места для поиска проблем:
# Логи Jenkins
sudo tail -f /var/log/jenkins/jenkins.log
# Системные логи
sudo journalctl -u jenkins -f
# Логи сборок
ls /var/lib/jenkins/jobs/*/builds/*/log
Производительность
Настройка JVM для Jenkins:
sudo nano /etc/default/jenkins
Добавляем параметры:
JAVA_ARGS="-Xmx2g -Xms1g -XX:+UseG1GC -XX:+UseStringDeduplication"
Интеграция с современными инструментами
Kubernetes Integration
Для запуска Jenkins агентов в Kubernetes кластере:
apiVersion: v1
kind: ConfigMap
metadata:
name: jenkins-config
data:
jenkins.yaml: |
jenkins:
clouds:
- kubernetes:
name: "kubernetes"
serverUrl: "https://kubernetes.default"
namespace: "jenkins"
jenkinsUrl: "http://jenkins:8080"
Terraform Integration
Пример пайплайна для автоматизации инфраструктуры:
stage('Infrastructure') {
steps {
script {
sh 'terraform init'
sh 'terraform plan -out=tfplan'
sh 'terraform apply tfplan'
}
}
}
Интересные факты и нестандартные применения
- Jenkins может управлять умным домом через IoT устройства
- Некоторые команды используют Jenkins для автоматизации отчётов и рассылок
- Jenkins может интегрироваться с Jira для автоматического закрытия задач
- Возможно использование Jenkins для автоматизации бэкапов баз данных
- Jenkins может управлять виртуальными машинами в VMware/VirtualBox
Решение частых проблем
Проблема: Jenkins не запускается
sudo systemctl status jenkins
sudo journalctl -u jenkins --no-pager
Часто помогает очистка временных файлов:
sudo rm -rf /var/lib/jenkins/war/*
sudo systemctl restart jenkins
Проблема: Нехватка памяти
Увеличиваем heap size:
sudo nano /etc/default/jenkins
# Добавляем или изменяем
JAVA_ARGS="-Xmx4g -Xms2g"
Проблема: Медленная работа
Оптимизируем конфигурацию:
# Отключаем ненужные плагины
# Настраиваем регулярную очистку workspace
# Используем SSD для Jenkins home
Где развернуть Jenkins
Для тестирования и небольших проектов подойдёт VPS сервер с 2-4 ГБ RAM. Для корпоративного использования с множеством проектов лучше взять выделенный сервер с возможностью масштабирования.
Заключение и рекомендации
Jenkins на Ubuntu 24 — это мощный инструмент для автоматизации DevOps процессов. При правильной настройке он может значительно упростить жизнь команде разработки и повысить качество продукта.
Рекомендую использовать Jenkins если:
- У вас сложные CI/CD процессы с множеством этапов
- Нужна интеграция с legacy системами
- Требуется полный контроль над процессом сборки
- Команда готова инвестировать время в настройку и поддержку
Не рекомендую если:
- Простые проекты с базовыми требованиями
- Нет времени на администрирование
- Команда небольшая и нужно быстрое решение
Помните: Jenkins — это не просто инструмент, это платформа, которая растёт вместе с вашими потребностями. Начните с простых пайплайнов и постепенно добавляйте сложность. Удачи в автоматизации!
Дополнительные ресурсы:
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.