Настройка Jenkins на выделенном сервере
Привет, коллеги! Сегодня мы поговорим о развертывании одного из самых мощных инструментов для автоматизации процессов CI/CD — Jenkins — на выделенном сервере. Если вы ищете способ получить полный контроль над вашей средой непрерывной интеграции и доставки, оптимизировать производительность для ресурсоемких сборок и обеспечить максимальную безопасность, то установка Jenkins на собственную железку или мощный VPS, как те, что предлагает Valebyte, — это именно то решение, которое позволит вам добиться этих целей. Это не просто установка софта; это фундамент для стабильной, масштабируемой и высокопроизводительной инфраструктуры автоматизации, позволяющий вам гибко настраивать каждый аспект процесса CI/CD под нужды ваших проектов.
В этой статье мы пройдемся по всем ключевым этапам: от подготовки сервера и базовой установки до настройки безопасности, интеграции с веб-сервером и создания первой задачи. Наша цель — не просто дать набор команд, а объяснить, почему мы делаем именно так, чтобы вы могли уверенно адаптировать эти знания под свои уникальные требования и проекты.
Почему выделенный сервер для Jenkins?
Прежде чем погрузиться в технические детали, давайте быстро пробежимся по преимуществам такого подхода, особенно актуальным для системных администраторов:
- Полный контроль: Вы сами выбираете операционную систему, версии необходимого программного обеспечения (Java, Git, Docker), управляете всеми системными ресурсами и политиками безопасности. Никаких ограничений, накладываемых облачными платформами или общими хостингами.
- Оптимизированная производительность: Выделенные ресурсы означают, что Jenkins не будет конкурировать за процессорное время, оперативную память или дисковые операции ввода/вывода с другими сервисами. Это критически важно для быстрых и стабильных сборок, особенно при работе с большими проектами или множеством параллельных задач.
- Повышенная безопасность: Возможность реализовать специфические для вашей организации политики безопасности, настроить фаервол, VPN-доступ, системы обнаружения вторжений и другие меры защиты, соответствующие самым строгим корпоративным стандартам.
- Гибкая масштабируемость: По мере роста ваших проектов вы сможете легко масштабировать ресурсы сервера (добавить CPU, RAM, увеличить объем диска) или интегрировать дополнительные агенты сборки, не привязываясь к тарифным планам облачных провайдеров.
- Экономическая эффективность: В долгосрочной перспективе, для больших объемов работы или постоянной нагрузки, выделенный сервер часто оказывается более экономичным решением, чем оплата по мере использования в облачных CI/CD-сервисах.
Подготовка сервера: Что нужно знать и иметь
Прежде чем мы начнем, убедитесь, что ваш выделенный сервер соответствует минимальным требованиям и у вас есть все необходимое для комфортной работы:
Нужен мощный сервер для Jenkins?
Обеспечьте стабильную и быструю работу Jenkins с нашими выделенными серверами. Получите полный контроль и высокую производительность для ваших проектов. — от €5.99/мес.
Выбрать сервер →
- Операционная система: Рекомендуем использовать актуальные LTS-версии Ubuntu Server (20.04/22.04) или Debian (11/12). Инструкции будут ориентированы на
apt-based дистрибутивы.
- Минимальные ресурсы: Для базовой установки и нескольких одновременных сборок потребуется минимум 2 ядра CPU, 4 ГБ RAM и 50 ГБ SSD-диска. Для серьезных проектов с большим количеством параллельных задач, сложными сборками или объемными артефактами потребуется значительно больше.
- SSH-доступ: К серверу с правами
sudo. Это стандарт для администрирования.
- Java Development Kit (JDK): Jenkins написан на Java, поэтому наличие совместимого JDK — обязательное условие. Рекомендуется OpenJDK 11 или 17.
- Открытый порт: По умолчанию Jenkins работает на порту 8080. Убедитесь, что этот порт открыт в вашем фаерволе. Позже мы настроим обратный прокси на стандартные порты 80/443.
Установка Java Development Kit (JDK)
Если у вас еще не установлен JDK, начнем с него. Для большинства современных систем рекомендуется OpenJDK 11 или 17. Мы будем использовать OpenJDK 11, так как он хорошо протестирован с Jenkins.
sudo apt update
sudo apt install openjdk-11-jdk -y
После установки убедимся, что Java корректно инсталлирована и доступна в системе:
java -version
Вывод должен быть похож на следующий, указывающий на OpenJDK 11:
openjdk version "11.0.21" 2023-10-17
OpenJDK Runtime Environment (build 11.0.21+9-post-Ubuntu-0ubuntu122.04)
OpenJDK 64-Bit Server VM (build 11.0.21+9-post-Ubuntu-0ubuntu122.04, mixed mode, sharing)
Установка Jenkins на Debian/Ubuntu
Теперь перейдем непосредственно к установке Jenkins. Мы добавим официальный репозиторий Jenkins, чтобы всегда иметь доступ к актуальным и стабильным версиям.
- Импортируем GPG-ключ репозитория Jenkins:
Для современных систем (Ubuntu 22.04+, Debian 11+), где apt-key считается устаревшим, используйте следующий метод:
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key | sudo tee /etc/apt/keyrings/jenkins-keyring.asc > /dev/null
Если вы используете более старую систему или предпочитаете старый метод (хотя он менее безопасен и не рекомендован):
wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -
- Добавляем репозиторий Jenkins в список источников apt:
Для современного метода с keyrings:
sudo sh -c 'echo deb [signed-by=/etc/apt/keyrings/jenkins-keyring.asc] https://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
Для старого метода с apt-key:
sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
- Обновляем список пакетов и устанавливаем Jenkins:
sudo apt update
sudo apt install jenkins -y
После установки Jenkins автоматически запустится как служба. Вы можете проверить его статус, чтобы убедиться, что все в порядке:
sudo systemctl status jenkins
Если все хорошо, вы увидите статус active (running).
Настройка фаервола
Убедитесь, что порт 8080 открыт в вашем фаерволе. Если вы используете UFW (Uncomplicated Firewall), выполните:
sudo ufw allow 8080
sudo ufw enable # Если UFW не был включен
sudo ufw status # Проверить текущие правила
Первоначальная настройка Jenkins через веб-интерфейс
Теперь, когда Jenkins установлен и запущен, пора получить к нему доступ через веб-браузер. Откройте http://ВАШ_IP_СЕРВЕРА:8080.
Вас встретит страница "Unlock Jenkins". Для продолжения потребуется ввести начальный административный пароль, который находится в специальном файле на сервере. Получить его можно следующей командой:
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
Скопируйте этот длинный пароль и вставьте его в соответствующее поле в браузере. Нажмите "Continue".
Установка плагинов
На следующем шаге вам предложат установить плагины. Рекомендую выбрать "Install suggested plugins". Это установит базовый набор плагинов, необходимый для большинства задач CI/CD (Git, Pipeline, SSH и т.д.). Вы всегда сможете добавить или удалить плагины позже через интерфейс управления.
Создание первого администратора
После установки плагинов вам будет предложено создать первого административного пользователя. Это очень важный шаг для безопасности! Не используйте стандартное имя admin, придумайте уникальное имя пользователя и надежный пароль. Заполните остальные поля и нажмите "Save and Finish".
Наконец, нажмите "Start using Jenkins". Поздравляю, вы вошли в панель управления Jenkins!
Настройка обратного прокси и SSL (Nginx)
Работать с Jenkins напрямую на порту 8080 не очень удобно и, что важнее, небезопасно для продакшн-среды. Настоятельно рекомендую настроить обратный прокси (например, Nginx) и SSL/TLS-шифрование. Это позволит получить доступ к Jenkins по стандартным портам 80/443, использовать доменное имя и обеспечить безопасность всего трафика.
Установка Nginx
sudo apt install nginx -y
sudo ufw allow 'Nginx Full' # Открываем порты 80 и 443 для Nginx
Конфигурация Nginx для Jenkins
Создадим новый конфигурационный файл для нашего Jenkins-инстанса. Например, /etc/nginx/sites-available/jenkins.conf:
sudo nano /etc/nginx/sites-available/jenkins.conf
Вставьте следующий код, заменив your_domain.com на ваш реальный домен. Убедитесь, что ваш домен уже указывает на IP-адрес сервера.
server {
listen 80;
listen [::]:80;
server_name your_domain.com; # Замените на ваш домен
location / {
proxy_pass http://localhost: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_redirect default;
proxy_buffering off;
proxy_request_buffering off;
proxy_max_temp_file_size 0;
client_max_body_size 100m; # Увеличьте, если планируете загружать большие файлы
}
}
Теперь активируем конфигурацию, создав символическую ссылку, и перезапустим Nginx:
sudo ln -s /etc/nginx/sites-available/jenkins.conf /etc/nginx/sites-enabled/
sudo rm /etc/nginx/sites-enabled/default # Удаляем дефолтную конфигурацию Nginx, если она есть
sudo nginx -t # Проверяем синтаксис конфигурации Nginx на ошибки
sudo systemctl restart nginx
Теперь вы сможете получить доступ к Jenkins по http://your_domain.com. Но нам нужен SSL для безопасного соединения!
Настройка SSL с Let's Encrypt
Для SSL мы используем Certbot от Let's Encrypt. Это бесплатно, просто в настройке и надежно.
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d your_domain.com # Замените на ваш домен
Следуйте инструкциям Certbot. Он автоматически настроит Nginx для использования HTTPS, обновит ваш конфигурационный файл и установит автоматическое продление сертификатов. После этого ваш Jenkins будет доступен по защищенному протоколу https://your_domain.com.
Базовые настройки Jenkins и плагины
Теперь, когда у нас есть безопасный доступ, давайте сделаем несколько базовых настроек, которые улучшат функциональность и удобство использования.
Управление плагинами
Перейдите в Управление Jenkins -> Управление плагинами. Здесь вы можете:
- Доступные: Искать и устанавливать новые плагины из обширного репозитория Jenkins.
- Установленные: Просматривать, отключать или удалять уже установленные плагины.
- Обновления: Устанавливать обновления для плагинов, что важно для безопасности и новых функций.
Несколько полезных плагинов, которые стоит рассмотреть (если не были установлены по умолчанию с "suggested plugins"):
- Git: Обязателен для интеграции с Git-репозиториями.
- Pipeline: Позволяет создавать сложные CI/CD конвейеры в виде кода (Jenkinsfile).
- Docker Pipeline: Если вы планируете использовать Docker-контейнеры в ваших сборках или для запуска агентов.
- SSH Agent / SSH Slaves: Для безопасного подключения к удаленным серверам или агентам сборки по SSH.
- Blue Ocean: Современный и интуитивно понятный графический интерфейс для управления пайплайнами.
Совет: После установки или обновления плагинов Jenkins часто предлагает перезапустить себя. Это хорошая практика для применения изменений.
Глобальные настройки инструментов
В Управление Jenkins -> Глобальная конфигурация инструментов вы можете настроить пути к JDK, Maven, Gradle, Git, Docker и другим инструментам, которые будут использоваться в ваших задачах. Это позволяет Jenkins автоматически находить и использовать нужные версии инструментов.
Например, для JDK вы можете указать "Install automatically" (Jenkins сам скачает и установит нужную версию) или задать путь к вашей установке OpenJDK 11.
Создание вашей первой Jenkins Pipeline
Вместо устаревших "Free-style projects" мы настоятельно рекомендуем использовать "Pipeline" — это современный подход, который позволяет описывать весь процесс CI/CD в коде (Jenkinsfile), хранящемся рядом с вашим проектом в Git-репозитории. Это обеспечивает версионирование, повторяемость и значительно облегчает совместную работу и управление сложными конвейерами.
- На главной странице Jenkins нажмите "New Item" (или "Создать новую задачу").
- Введите имя для вашей задачи (например,
MyFirstDeclarativePipeline) и выберите тип "Pipeline". Нажмите "OK".
- На странице конфигурации прокрутите до раздела "Pipeline".
- В поле "Definition" выберите "Pipeline script" для простого примера, который мы вставим прямо здесь. В реальных проектах вы будете использовать "Pipeline script from SCM" для чтения
Jenkinsfile из Git-репозитория.
- Вставьте следующий простой пример декларативного пайплайна:
pipeline {
agent any // Указывает, что пайплайн может выполняться на любом доступном агенте
stages {
stage('Checkout Code') {
steps {
echo 'Checking out source code...'
// Здесь обычно происходит клонирование вашего Git-репозитория
// git 'https://github.com/your-org/your-repo.git'
}
}
stage('Build') {
steps {
echo 'Building the application...'
// Здесь могли бы быть команды сборки, например:
// sh 'mvn clean install' // Для Maven-проектов
// sh 'npm install && npm run build' // Для Node.js-проектов
}
}
stage('Test') {
steps {
echo 'Running tests...'
// sh 'mvn test' // Запуск тестов
// sh 'npm test'
}
}
stage('Deploy Staging') {
steps {
echo 'Deploying to staging environment...'
// sh 'scp -r target/app.jar [email protected]_domain.com:/var/www/'
}
}
}
post {
always {
echo 'Pipeline finished.'
}
success {
echo 'Pipeline completed successfully!'
}
failure {
echo 'Pipeline failed. Check logs.'
}
}
}
- Нажмите "Save".
- Теперь на странице вашей задачи в левом меню нажмите "Build Now". Вы увидите, как Jenkins выполняет стадии вашего пайплайна, а в "Stage View" сможете отслеживать прогресс визуально.
Это лишь верхушка айсберга. В реальных проектах Jenkinsfile будет намного сложнее, интегрируясь с Git, Docker, Kubernetes, облачными сервисами и другими инструментами, но этот пример дает базовое понимание.
Обслуживание и лучшие практики
Чтобы ваш Jenkins-сервер работал стабильно, безопасно и эффективно, не забывайте о следующих рекомендациях:
- Резервное копирование: Регулярно создавайте резервные копии директории
/var/lib/jenkins. Это сердце вашего Jenkins-инстанса, содержащее все настройки, плагины, данные задач, историю сборок и пользовательские данные. Без этого восстановление будет крайне затруднительным.
- Обновления: Своевременно обновляйте сам Jenkins и все установленные плагины. Это не только добавляет новые функции и улучшения, но и закрывает обнаруженные уязвимости безопасности.
- Мониторинг: Следите за использованием ресурсов сервера (CPU, RAM, диск). Jenkins может быть достаточно ресурсоемким, особенно при параллельных сборках. Используйте такие инструменты, как
htop, glances, Prometheus/Grafana.
- Безопасность: Помимо надежных паролей и SSL, рассмотрите интеграцию с централизованными системами аутентификации (LDAP/Active Directory), если это применимо. Регулярно проверяйте журнал аудита Jenkins на предмет подозрительной активности.
- Управление агентами сборки: Для больших проектов или проектов с разными зависимостями (например, одни собираются на Java 11, другие на Java 17) рассмотрите использование агентов сборки (Jenkins Agents). Это позволяет распределять нагрузку, изолировать среды сборки и масштабировать инфраструктуру CI/CD горизонтально.
- Очистка старых сборок: Настройте политику хранения сборок для каждой задачи, чтобы избежать переполнения диска историей сборок и артефактами.
Выводы
Настройка Jenkins на выделенном сервере — это мощный шаг к полной автоматизации ваших процессов разработки и развертывания. Вы получаете максимальный контроль, производительность и безопасность, что особенно ценно для критически важных проектов и больших команд. Мы прошлись по всему пути: от установки Java и самого Jenkins до настройки безопасного доступа через Nginx с SSL и создания первой Pipeline-задачи. Помните, что Jenkins — это гибкий и мощный инструмент, который требует регулярного внимания и оптимизации, но вложенные усилия окупятся сторицей, значительно ускоряя ваш цикл разработки и повышая качество выпускаемого продукта.
Если у вас возникнут вопросы по настройке, масштабированию или потребуется мощный и надежный выделенный сервер для вашего Jenkins, обращайтесь в Valebyte — мы всегда готовы помочь вам с инфраструктурными решениями!
Ищете гибкое решение для Jenkins?
Наши VPS-хостинги предлагают идеальный баланс производительности и доступности. Масштабируйте ресурсы по мере роста ваших потребностей.
Посмотреть VPS →