Не удается получить доступ к серверу Jenkins.

Вопрос или проблема

Я пытаюсь установить Jenkins на мой веб-сервер, который является сервером Ubuntu 13.10, работающим на экземпляре Amazon EC2. Я перезапустил Jenkins, используя

sudo /etc/init.d/jenkins restart

Когда я проверяю процессы командой

ps aux | grep jenkins

Я вижу несколько элементов с следующими описаниями:

jenkins  22356  0.0  0.0  20268   400 ?        S    10:10   0:00 /usr/bin/daemon --name=jenkins --inherit --env=JENKINS_HOME=/var/lib/jenkins --output=/var/log/jenkins/jenkins.log --pidfile=/var/run/jenkins/jenkins.pid -- /usr/bin/java -jar /usr/share/jenkins/jenkins.war --webroot=/var/run/jenkins/war --httpPort=8080 --ajp13Port=-1 --httpListenAddress=127.0.0.1 --ajp13ListenAddress=127.0.0.1 --preferredClassLoader=java.net.URLClassLoader
jenkins  22358  5.9  5.7 1618372 97376 ?       Sl   10:10   0:17 /usr/bin/java -jar /usr/share/jenkins/jenkins.war --webroot=/var/run/jenkins/war --httpPort=8080 --ajp13Port=-1 --httpListenAddress=127.0.0.1 --ajp13ListenAddress=127.0.0.1 --preferredClassLoader=java.net.URLClassLoader

Сервер не позволяет мне получить доступ к этой установке, так что если я захожу по адресу

x.x.x.x:8080

Я получаю страницу “Упс! Google Chrome не может подключиться“, даже не HTTP статус 404 / 500.

Я проверил /var/log/jenkins/jenkins.log, но он не указывает на какие-либо проблемы. Вот вывод лога после перезапуска:

Running from: /usr/share/jenkins/jenkins.war
Dec 02, 2013 10:10:07 AM winstone.Logger logInternal
INFO: Beginning extraction from war file
Jenkins home directory: /var/lib/jenkins found at: EnvVars.masterEnvVars.get("JENKINS_HOME")
Dec 02, 2013 10:10:13 AM winstone.Logger logInternal
INFO: HTTP Listener started: port=8080
Dec 02, 2013 10:10:13 AM winstone.Logger logInternal
INFO: Winstone Servlet Engine v0.9.10 running: controlPort=disabled
Dec 02, 2013 10:10:14 AM jenkins.InitReactorRunner$1 onAttained
INFO: Started initialization
Dec 02, 2013 10:10:14 AM jenkins.InitReactorRunner$1 onAttained
INFO: Listed all plugins
Dec 02, 2013 10:10:14 AM jenkins.InitReactorRunner$1 onAttained
INFO: Prepared all plugins
Dec 02, 2013 10:10:14 AM jenkins.InitReactorRunner$1 onAttained
INFO: Started all plugins
Dec 02, 2013 10:10:14 AM jenkins.InitReactorRunner$1 onAttained
INFO: Augmented all extensions
Dec 02, 2013 10:10:22 AM jenkins.InitReactorRunner$1 onAttained
INFO: Loaded all jobs
Dec 02, 2013 10:10:23 AM jenkins.InitReactorRunner$1 onAttained
INFO: Completed initialization
Dec 02, 2013 10:10:23 AM hudson.TcpSlaveAgentListener <init>
INFO: JNLP slave agent listener started on TCP port 43315
Dec 02, 2013 10:10:23 AM hudson.WebAppMain$2 run
INFO: Jenkins is fully up and running

Я думал, у меня могут быть проблемы с блокировкой порта в группы безопасности EC2, но моя группа безопасности, назначенная этому серверу, имеет открытый порт 8080 для входящих HTTP.

Еще одна проверка, которую я попробовал, была произвести SSH в сервер и использовать Lynx, чтобы увидеть, действительно ли Jenkins подает контент. Я посетилhttp://localhost:8080, и он показывал страницу Jenkins как ожидалось.

Какие-то идеи?

ИЗМЕНЕНИЕ 2

Если вы запускаете Jenkins на экземпляре Amazon EC2, попробуйте установить HTTP_HOST на 0.0.0.0. Возможно, вы не сможете напрямую присвоить IP-адрес публичного интерфейса.


ИЗМЕНЕНИЕ 1

Проверьте /etc/default/jenkins, если вы устанавливали напрямую из .deb пакета.


Похоже, Jenkins слушает на localhost (--httpListenAddress=127.0.0.1). В этой конфигурации Jenkins не слушает соединения с сетевого интерфейса.

Чтобы решить проблему на Ubuntu, проверьте содержимое /etc/init/jenkins.conf и добавьте --httpListenAddress=x.x.x.x к JENKINS_ARGS (где x.x.x.x это внешний IP-адрес сервера).

Как я решил проблему доступа по порту Jenkins на 8080 🚀

🔧 Сегодня я успешно решил проблему внешнего доступа к Jenkins на порту 8080. Вот краткое изложение шагов, которые я сделал:

Шаг 1: Редактирование конфигурации Jenkins

Я отредактировал конфигурацию сервиса Jenkins, чтобы убедиться, что он слушает на правильном порту и IP-адресе:

sudo systemctl edit jenkins

Это открыло файл drop-in по адресу /etc/systemd/system/jenkins.service.d/override.conf. Я изменил переменные окружения следующим образом:

[Service] Environment=”JAVA_OPTS=-Djava.awt.headless=true -Djava.net.preferIPv4Stack=true -Djava.io.tmpdir=/var/cache/jenkins/tmp -Dorg.apache.commons.jelly.tags.fmt.timeZone=America/New_York -Duser.timezone=America/New_York” Environment=”JENKINS_OPTS=–pluginroot=/var/cache/jenkins/plugins”

После сохранения я перезапустил Jenkins, чтобы применить изменения:

sudo systemctl restart jenkins

Также добавьте временный каталог.

sudo mkdir /var/cache/jenkins/tmp

Шаг 2: Открытие порта 8080 в облачном фаерволе

Так как мой сервер размещен в облаке, я открыл порт 8080 в соответствующей конфигурации безопасности:

AWS: Добавил правило для входящих для порта 8080 в группе безопасности EC2.

Azure: Настроил правило безопасности для входящего трафика для виртуальной машины.

GCP: Добавил правило фаервола для экземпляра.

Oracle Cloud: Открыл порт 8080 в списке безопасности виртуальной облачной сети (VCN).

Шаг 3: Обновление iptables

Я заметил, что трафик все еще блокируется внутри. Проверив iptables, я обнаружил правило REJECT, блокирующее трафик на порт 8080. Чтобы решить эту проблему, я добавил правило ACCEPT в начало цепочки:

sudo iptables -I INPUT 1 -p tcp –dport 8080 -j ACCEPT sudo
iptables-save

Основные выводы

1️⃣ Отредактируйте конфигурацию сервиса Jenkins, чтобы убедиться, что он привязывается к правильному IP/порту. 2️⃣ Откройте необходимые порты в настройках безопасности вашего облачного провайдера. 3️⃣ Настройте локальные правила фаервола (iptables) для разрешения трафика, приоритизируя правила ACCEPT над REJECT.

После этих настроек Jenkins стал полностью доступным на порту 8080. 🎉enter code here

.

Ответ или решение

Если вам не удается получить доступ к серверу Jenkins, установленному на сервере Ubuntu 13.10 с использованием Amazon EC2, важно рассмотреть несколько аспектов, которые могут быть причинами этой проблемы. Применив метод TEA (Теория, Пример, Применение), вы можете систематически подойти к решению этой задачи.

Теория

Первая и основная причина вашей проблемы может заключаться в том, что Jenkins настроен на прослушивание исключительно локального интерфейса (127.0.0.1), а это значит, что он не будет доступен извне через публичный IP-адрес. Также важную роль могут играть настройки безопасности, такие как группы безопасности EC2 и конфигурации iptables, которые могли быть неправильно настроены и блокируют доступ к порту 8080 извне.

Пример

В описанной вами ситуации видно, что Jenkins успешно запускается и работает без ошибок, так как логи не содержат сообщений о проблемах, а локальный доступ через Lynx показывает, что Jenkins сервирует контент. Тем не менее, при попытке доступа через внешний IP-адрес, вы сталкиваетесь с ошибкой подключения. Это указывает на возможные ограничения на уровне сетевого интерфейса и правил безопасности.

Применение

  1. Проверка конфигурации Jenkins:

    • Откройте файл конфигурации Jenkins, который может находиться в /etc/default/jenkins или /etc/init/jenkins.conf, в зависимости от способа установки.
    • Убедитесь, что Jenkins настроен на прослушивание всех интерфейсов, изменив параметр --httpListenAddress=127.0.0.1 на --httpListenAddress=0.0.0.0. Это позволит принимать подключение как с локального компьютера, так и с других машин в сети.
  2. Настройка групп безопасности (Security Groups) в AWS:

    • Перейдите в консоль управления EC2 и проверьте настройку групп безопасности для вашего экземпляра.
    • Убедитесь, что в правилах inbound разрешен трафик на порт 8080.
  3. Настройка iptables:

    • Подключитесь к вашему серверу через SSH и проверьте, есть ли запретительные правила в iptables для порта 8080.
    • Для разрешения трафика выполните команду:
      sudo iptables -I INPUT 1 -p tcp --dport 8080 -j ACCEPT
    • Сохраните изменения, используя:
      sudo iptables-save
  4. Перезапуск Jenkins:

    • Выполните команду sudo systemctl restart jenkins, чтобы применить изменения конфигурации и убедиться, что Jenkins теперь прослушивает на всех интерфейсах.

Проведя эти корректировки, вы должны заметить, что сервер Jenkins становится доступен снаружи по адресу http://x.x.x.x:8080. Это комплексное решение должно помочь вам преодолеть проблемы с подключением в такой конфигурации.

Оцените материал
Добавить комментарий

Капча загружается...