Установка и настройка Jenkins на Rocky Linux 9 с обратным прокси Apache и SSL
Введение

Jenkins — это Open Source инструмент автоматизации для непрерывной интеграции и доставки (CI/CD). Он написан на Java и поддерживает более 1000 плагинов для сборки, тестирования, упаковки и развёртывания приложений. Jenkins позволяет интегрировать этапы жизненного цикла разработки: сборка, тестирование, статический анализ, упаковка и развёртывание.
Краткое определение: Jenkins — сервер автоматизации, который запускает сценарии сборки и интеграции по триггеру или расписанию.
В этой статье вы научитесь:
- Устанавливать Java OpenJDK и репозиторий Jenkins на Rocky Linux 9.
- Устанавливать и настраивать Jenkins как сервис systemd.
- Настраивать Apache/httpd как обратный прокси с SSL (Let’s Encrypt или самоподписанный сертификат).
- Открывать порты в firewalld и учитывать SELinux.
- Создавать первую простую задачу (Freestyle) и просматривать консольные логи.
- Базовые шаги безопасности, резервное копирование и отладка.
Important: В примерах используется домен jenkins.howtoforge.local. Замените его на ваш реальный домен, указанный в DNS.
Основные варианты использования
Primary intent: Установка и настройка Jenkins на Rocky Linux 9
Связанные варианты запросов:
- Установка Jenkins с Apache reverse proxy
- Конфигурация SSL для Jenkins
- Настройка firewalld и SELinux для Jenkins
- Создание первой сборки Jenkins
Требования и подготовка
- Сервер с Rocky Linux 9.
- Непривилегированный пользователь с sudo.
- Домен, указывающий на IP сервера (пример: jenkins.howtoforge.local).
- SELinux в режиме permissive или нужные контексты и правила, если режим enforcing.
- Подключение к интернету для установки пакетов и доступа к репозиторию Jenkins.
Примечание: SELinux в режиме permissive выводит предупреждения, но не блокирует. На продакшене рекомендуется оставлять SELinux в enforcing и настроить контексты безопасности.
Установка Java OpenJDK
Jenkins работает на JVM. Рекомендуется использовать OpenJDK 11 или 17. В примерах ниже используется OpenJDK 11.
Установите пакет:
sudo dnf install java-11-openjdkПодтвердите установку, нажав y, затем Enter.
Проверьте версию Java:
java -version
Пояснение: Jenkins официально поддерживает OpenJDK 11 и 17. Если вы используете плагины с требованиями к Java, проверьте их совместимость.
Добавление репозитория Jenkins
Jenkins распространяется в виде RPM-пакетов для RHEL-подобных ОС. Сначала установите утилиты:
sudo dnf install wget curlЗагрузите репозиторий:
sudo wget -O /etc/yum.repos.d/jenkins.repo \
https://pkg.jenkins.io/redhat-stable/jenkins.repoИмпортируйте ключ GPG:
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
Проверьте списки репозиториев:
sudo dnf repolistЕсли репозиторий доступен, можно переходить к установке.
Установка Jenkins и запуск сервиса
Установите пакет Jenkins:
sudo dnf install jenkinsПосле установки перезагрузите менеджер systemd и запустите сервис:
sudo systemctl daemon-reload
sudo systemctl start jenkins
sudo systemctl enable jenkinsПроверка статуса:
sudo systemctl status jenkins


Пояснение: По умолчанию Jenkins слушает на порту 8080. Мы настроим обратный прокси Apache, чтобы обеспечить доступ через стандартные 80/443 и добавить SSL.
Установка и настройка httpd как обратного прокси
Мы будем использовать Apache/httpd в качестве reverse proxy. Это позволяет:
- Использовать стандартные порты 80/443.
- Управлять TLS на уровне Apache (например, Let’s Encrypt).
- Добавлять дополнительные правила (аутентификация, rate limiting, WAF).
Установите httpd и mod_ssl:
sudo dnf install httpd mod_ssl
Если у вас нет сертификата, можно создать самоподписанный для теста:
sudo openssl req -newkey rsa:2048 -nodes -keyout /etc/pki/tls/private/localhost.key \
-x509 -days 365 -out /etc/pki/tls/certs/localhost.crtДля продакшена рекомендую Let’s Encrypt через certbot. Пример установки certbot и получения сертификата:
sudo dnf install certbot python3-certbot-apache
sudo certbot --apache -d jenkins.howtoforge.localСоздайте конфигурацию виртуального хоста:
sudo nano /etc/httpd/conf.d/jenkins.confПример содержимого (обновите домен и пути к сертификатам):
ServerAdmin webmaster@localhost
ServerName jenkins.howtoforge.local
Redirect permanent / https://jenkins.howtoforge.local/
ServerName jenkins.howtoforge.local
SSLEngine On
SSLCertificateFile /etc/letsencrypt/live/jenkins.howtoforge.local/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/jenkins.howtoforge.local/privkey.pem
ServerAdmin webmaster@localhost
ProxyRequests Off
ProxyPreserveHost On
AllowEncodedSlashes NoDecode
Require all granted
ProxyPass / http://localhost:8080/ nocanon
ProxyPassReverse / http://localhost:8080/
ProxyPassReverse / https://jenkins.howtoforge.local/
RequestHeader set X-Forwarded-Proto "https"
RequestHeader set X-Forwarded-Port "443"
Пояснение ключевых опций:
- ProxyPreserveHost On — сохраняет Host заголовок, полезно для плагинов и URL в Jenkins.
- AllowEncodedSlashes NoDecode — разрешает закодированные слэши в URL, которые Jenkins иногда использует.
- RequestHeader — сообщает Jenkins, что соединение было через HTTPS.
Проверьте конфигурацию Apache:
sudo apachectl configtestЗапустите и включите httpd:
sudo systemctl start httpd
sudo systemctl enable httpd
sudo systemctl status httpd

Important: Если SELinux включён в режиме enforcing, может понадобиться разрешить Apache делать проксирование и подключаться к сети на порт 8080:
sudo setsebool -P httpd_can_network_connect onТакже убедитесь, что модуль proxy и proxy_http загружены (обычно они идут с httpd):
sudo apachectl -M | grep proxyНастройка Firewalld
Firewalld — штатный файрвол в RHEL-подобных дистрибутивах. Откройте HTTP и HTTPS:
sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-service=https --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --list-services
Если вы используете нестандартные зоны или обходите NAT, корректируйте правила под свою архитектуру.
Первичная настройка Jenkins через веб-интерфейс
Получите начальный административный пароль:
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
Откройте браузер и перейдите по URL: https://jenkins.howtoforge.local/
На первом экране введите initialAdminPassword и нажмите Continue.

Выберите “Install suggested plugins” для простого старта или установите плагины вручную.

По завершении установки плагинов создайте администратора, задайте имя, email и пароль, затем укажите URL Jenkins и нажмите Save and Finish.


После этого вы попадёте на панель управления Jenkins.

Создание первой сборки (Freestyle project)
На дашборде нажмите New Item.

Укажите имя проекта, например First Build, и выберите Freestyle project.

В разделе Build добавьте шаг Execute shell и вставьте простую команду:
echo "This is First build on jenkins"Сохраните проект.

На странице проекта нажмите Build Now. В Build History появится запись. Откройте Console Output, чтобы увидеть вывод сборки.



Теперь вы знаете, как создать и запустить простую задачу Jenkins.
Рекомендации по безопасности и hardening
- Используйте HTTPS с валидными сертификатами (Let’s Encrypt или коммерческие).
- Ограничьте доступ к веб-интерфейсу по IP, если это возможно (через Apache или сетевой ACL).
- Включите Matrix-based security в Jenkins и задайте минимально необходимые права.
- Регулярно обновляйте Jenkins и плагины. Перед обновлением тестируйте на стенде.
- Включите аудит логов и храните их отдельно.
- Запустите Jenkins под отдельным системным пользователем (стандартно /var/lib/jenkins).
- Настройте резервные копии конфигурации (см. раздел Backup).
- На уровне ОС включите SELinux в enforcing и настройте нужные boolean-переменные.
Команды для SELinux для Apache + Jenkins (если требуется сетевой доступ):
sudo setsebool -P httpd_can_network_connect onУбедитесь, что файлы сертификатов и ключей имеют правильные права и контексты SELinux.
Резервное копирование и восстановление
Минимальный набор для бэкапа:
- /var/lib/jenkins (jobs, plugins, secrets, config.xml)
- /var/log/jenkins
- Список установленных пакетов (rpm -qa)
- Снимок /etc/httpd/conf.d/ с конфигурацией обратного прокси
Простой сценарий бэкапа:
sudo systemctl stop jenkins
sudo tar -czf /backup/jenkins-$(date +%F).tar.gz /var/lib/jenkins /etc/httpd/conf.d /etc/letsencrypt
sudo systemctl start jenkinsДля восстановления распакуйте архив и восстановите права владельца и контексты SELinux, затем перезапустите сервисы.
Ролевые чеклисты
Администратор сервера:
- Настроить DNS и получить сертификат.
- Установить Java, Jenkins, Apache, firewalld.
- Настроить SELinux и разрешения.
- Настроить резервное копирование и мониторинг.
DevOps/инженер CI:
- Настроить пользователей и права в Jenkins.
- Установить нужные плагины и job templates.
- Настроить pipelines и тестовые сборки.
- Настроить интеграцию с VCS и артефакт-репозиториями.
Разработчик:
- Понимать, как триггерить сборку (webhook, push, cron).
- Читать логи билда и исправлять ошибки.
- Писать Jenkinsfile для pipeline при необходимости.
Примеры альтернативных подходов
- Контейнерный Jenkins: запускать Jenkins в Docker/Kubernetes — полезно для изоляции и масштабирования.
- Nginx как reverse proxy: если вы предпочитаете Nginx, конфигурация аналогична.
- Использовать SSO/LDAP для централизованной аутентификации.
Контейнерный пример (docker-compose):
version: '3'
services:
jenkins:
image: jenkins/jenkins:lts
ports:
- "8080:8080"
- "50000:50000"
volumes:
- jenkins_home:/var/jenkins_home
volumes:
jenkins_home:Ментальные модели и критерии приёмки
Ментальная модель установки:
- Уровень ОС: пакеты, фаервол, SELinux
- Уровень сервиса: systemd и файлы конфигурации Jenkins
- Уровень доступа: reverse proxy, TLS, права пользователей
- Уровень CI: jobs, плагины, интеграция с VCS
Критерии приёмки:
- Jenkins доступен по HTTPS на указанном домене.
- Сервис Jenkins запущен и активен (systemctl active).
- Веб-интерфейс принимает логин администратора после ввода initialAdminPassword.
- Первая сборка успешно выполняется и вывод виден в Console Output.
- Бэкап Jenkins успешно создан и восстановлен на тестовом стенде.
Отладка и распространённые проблемы
- Jenkins недоступен через Apache — проверьте, запущен ли Jenkins на 8080 и разрешено ли Apache подключаться (setsebool httpd_can_network_connect).
- Проблемы с сертификатом — проверьте цепочку сертификатов и соответствие ServerName.
- 502 Bad Gateway — проверьте ProxyPass адрес и порт, убедитесь, что Jenkins слушает localhost:8080.
- Проблемы с правами файлов — убедитесь, что /var/lib/jenkins принадлежит пользователю jenkins.
- SELinux блокирует доступ — смотрите /var/log/audit/audit.log и используйте audit2allow для создания правил.
Полезные команды:
sudo journalctl -u jenkins -f
sudo tail -n 200 /var/log/httpd/error_log
sudo ausearch -m avc -ts recent | audit2allow -m localjenkinsПодбор плагинов и тесты приёмки
Рекомендуемые плагины на старте:
- Pipeline (для Jenkinsfile)
- Git
- GitHub / GitLab Integration
- Credentials
- Matrix Authorization Strategy
- Blue Ocean (опционально)
Критерии приёмки для job:
- Ветка берётся из репозитория (git clone проходит).
- Скрипты сборки выполняются без ошибок.
- Артефакты сохраняются в рабочем каталоге.
Простейший тестовый кейс:
- Создать Freestyle job с шагом “Execute shell” -> echo “ok”.
- Нажать Build Now.
- Убедиться, что в Console Output присутствует “ok”.
Мини-методология: от установки к продакшену
- Установите и проверьте Jenkins на тестовой машине с теми же конфигурациями.
- Настройте автоматические бэкапы и мониторинг.
- Протестируйте обновление Jenkins и плагинов на стенде.
- Перенесите конфигурацию на продакшен с сохранением версий и бэкапов.
Миграция и совместимость
- Версии Java: проверьте плагины на совместимость с OpenJDK 11/17.
- Переезд с Jenkins standalone к Docker: используйте backup/restore или Job Export/Import плагины.
- При переходе между версиями Jenkins учитывайте изменения API плагинов.
Частые сценарии отказа и откат
Если после обновления Jenkins или плагинов система нестабильна:
- Откатите плагины в UI (если возможно).
- Восстановите конфигурацию из бэкапа (остановите Jenkins, распакуйте /var/lib/jenkins, запустите).
- Тестируйте изменения в staging перед применением на prod.
Короткая шпаргалка команд
- Установка Java: sudo dnf install java-11-openjdk
- Установка Jenkins: sudo dnf install jenkins
- Управление сервисом: sudo systemctl start|stop|status jenkins
- Проверка Apache: sudo apachectl configtest
- SELinux для прокси: sudo setsebool -P httpd_can_network_connect on
Сводка
Вы установили Jenkins на Rocky Linux 9, настроили Apache как обратный прокси с HTTPS, открыли порты в firewalld и выполнили первую сборку. Дополнительно рассмотрены вопросы безопасности, резервного копирования, отладки и типичные сценарии миграции.
Важно: перед применением в продакшен протестируйте весь процесс обновления и восстановления на отдельной среде.
Ключевые действия для следующей итерации:
- Настроить регулярные бэкапы и тесты восстановления.
- Внедрить отключаемую среду для тестирования обновлений плагинов.
- Подключить SSO/LDAP для централизованной аутентификации, если требуется.
Краткая справка (глоссарий)
Jenkinsfile — декларативный или scripted файл для описания pipeline. Reverse proxy — веб-сервер, который пересылает запросы к внутренним сервисам. Let’s Encrypt — бесплатный центр сертификации, выдаёт TLS-сертификаты. SELinux — подсистема безопасности Linux, реализующая мандатный контроль доступа. firewalld — динамический демон для управления правилами netfilter.
Часто задаваемые вопросы
Q: Можно ли использовать Nginx вместо Apache? A: Да. Конфигурация аналогична — нужно настроить proxy_pass и заголовки X-Forwarded-*.
Q: Нужно ли открывать порт 8080 во внешнем фаерволе? A: Нет, если используется reverse proxy на том же хосте. Открывайте только 80/443.
Q: Как безопасно обновлять плагины? A: Сначала тестируйте на стенде, делайте бэкап, проверяйте совместимость.
Аннотация для соцсетей
Jenkins на Rocky Linux 9: пошаговая установка с Apache reverse proxy и HTTPS. Включает настройку SELinux, firewalld, рекомендации по безопасности и бэкапу.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента