Гид по технологиям

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

• 9 min read • DevOps • Обновлено 26 Nov 2025
Jenkins на Rocky Linux 9: установка и Apache/SSL
Jenkins на Rocky Linux 9: установка и Apache/SSL

Введение

Внешний вид Jenkins

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

Установка Java

Пояснение: 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

Добавление репозитория Jenkins

Проверьте списки репозиториев:

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

Запуск и включение Jenkins

Проверка статуса 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

Установка httpd

Если у вас нет сертификата, можно создать самоподписанный для теста:

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

Проверка конфигурации httpd

Проверка статуса 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

Настройка firewalld

Если вы используете нестандартные зоны или обходите 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.

Создание администратора

Конфигурация instance URL

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

Панель 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

  1. Используйте HTTPS с валидными сертификатами (Let’s Encrypt или коммерческие).
  2. Ограничьте доступ к веб-интерфейсу по IP, если это возможно (через Apache или сетевой ACL).
  3. Включите Matrix-based security в Jenkins и задайте минимально необходимые права.
  4. Регулярно обновляйте Jenkins и плагины. Перед обновлением тестируйте на стенде.
  5. Включите аудит логов и храните их отдельно.
  6. Запустите Jenkins под отдельным системным пользователем (стандартно /var/lib/jenkins).
  7. Настройте резервные копии конфигурации (см. раздел Backup).
  8. На уровне ОС включите 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 успешно создан и восстановлен на тестовом стенде.

Отладка и распространённые проблемы

  1. Jenkins недоступен через Apache — проверьте, запущен ли Jenkins на 8080 и разрешено ли Apache подключаться (setsebool httpd_can_network_connect).
  2. Проблемы с сертификатом — проверьте цепочку сертификатов и соответствие ServerName.
  3. 502 Bad Gateway — проверьте ProxyPass адрес и порт, убедитесь, что Jenkins слушает localhost:8080.
  4. Проблемы с правами файлов — убедитесь, что /var/lib/jenkins принадлежит пользователю jenkins.
  5. 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 проходит).
  • Скрипты сборки выполняются без ошибок.
  • Артефакты сохраняются в рабочем каталоге.

Простейший тестовый кейс:

  1. Создать Freestyle job с шагом “Execute shell” -> echo “ok”.
  2. Нажать Build Now.
  3. Убедиться, что в Console Output присутствует “ok”.

Мини-методология: от установки к продакшену

  1. Установите и проверьте Jenkins на тестовой машине с теми же конфигурациями.
  2. Настройте автоматические бэкапы и мониторинг.
  3. Протестируйте обновление Jenkins и плагинов на стенде.
  4. Перенесите конфигурацию на продакшен с сохранением версий и бэкапов.

Миграция и совместимость

  • Версии Java: проверьте плагины на совместимость с OpenJDK 11/17.
  • Переезд с Jenkins standalone к Docker: используйте backup/restore или Job Export/Import плагины.
  • При переходе между версиями Jenkins учитывайте изменения API плагинов.

Частые сценарии отказа и откат

Если после обновления Jenkins или плагинов система нестабильна:

  1. Откатите плагины в UI (если возможно).
  2. Восстановите конфигурацию из бэкапа (остановите Jenkins, распакуйте /var/lib/jenkins, запустите).
  3. Тестируйте изменения в 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, рекомендации по безопасности и бэкапу.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро