Home » Установка Jenkins на Ubuntu 24
Установка Jenkins на Ubuntu 24

Установка 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 — это не просто инструмент, это платформа, которая растёт вместе с вашими потребностями. Начните с простых пайплайнов и постепенно добавляйте сложность. Удачи в автоматизации!

Дополнительные ресурсы:


В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.

Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.

Leave a reply

Your email address will not be published. Required fields are marked