Нельзя делать Jenkins доступным извне.

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

Я размещаю Jenkins на Windows (исторические причины) Только что обновил его с 1.620 до 2.62

Все работает как ожидалось, за исключением маленькой детали: я больше не могу получить к нему доступ. Доступ к нему возможен только с хоста.

Я нашел множество постов по этой теме, и все они предлагали изменить параметры запуска, чтобы установить:

--httpListenAddress=0.0.0.0

или

--httpListenAddress=HOST

Я попробовал оба решения, результат тот же. Jenkins работает, когда доступ осуществляется с хоста по:

  • 127.0.0.1
  • 10.0.1.11 (внутренний IP)
  • x.x.x.x (внешний IP)
  • HOST

но не работает при доступе с любого другого компьютера.

Я проверил настройки брандмауэра и Azure. Другой сервис (nexus:8081) доступен, как ожидалось. Изменение порта на 8080 не помогло.

Вот jenkins.xml

<service>
  <id>jenkins</id>
  <name>Jenkins</name>
  <description>This service runs Jenkins continuous integration system.            
</description>
  <env name="JENKINS_HOME" value="%BASE%"/>
  <env name="HTTP_HOST" value="HOST.cloudapp.net"/>
  <executable>%JAVA_HOME%\jre\bin\java</executable>
  <arguments>-Xrs -Xmx512M -Dfile.encoding=UTF8 -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -jar "%BASE%\jenkins.war" --httpPort=80 --httpListenAddress="%HTTP_HOST%" --webroot="%BASE%\war"</arguments>
  <logmode>rotate</logmode>
  <onfailure action="restart" />
</service>

Вот лог Jenkins

INFO: Started w.@1750fbeb{/,file:///E:/Program%20Files%20(x86)/Jenkins/war/,AVAILABLE}{E:\Program Files (x86)\Jenkins\war}
May 25, 2017 2:17:51 AM org.eclipse.jetty.server.AbstractConnector doStart
INFO: Started ServerConnector@7ae0a9ec{HTTP/1.1,[http/1.1]}{HOST.cloudapp.net:80}
May 25, 2017 2:17:51 AM org.eclipse.jetty.server.Server doStart
INFO: Started @4534ms
May 25, 2017 2:17:51 AM winstone.Logger logInternal
INFO: Winstone Servlet Engine v4.0 running: controlPort=disabled
May 25, 2017 2:17:54 AM jenkins.InitReactorRunner$1 onAttained
INFO: Started initialization
May 25, 2017 2:17:55 AM jenkins.InitReactorRunner$1 onAttained
INFO: Listed all plugins
(removed few lines about ruby failing)
INF/jruby.home/lib/ruby/shared/rubygems/custom_require.rb:36
May 25, 2017 2:18:04 AM jenkins.InitReactorRunner$1 onTaskFailed
SEVERE: Failed Loading plugin ruby-runtime v0.12 (ruby-runtime)
May 25, 2017 2:18:40 AM hudson.WebAppMain$3 run
INFO: Jenkins is fully up and running

когда httpListenAddress был 0.0.0.0 лог был:

INFO: Started ServerConnector@7ae0a9ec{HTTP/1.1,[http/1.1]}{0.0.0.0:80}

выяснилось, что этот вопрос не имеет отношения к Jenkins. Прошу прощения у всех, кто пытался ответить. (Правильная настройка — использовать либо значение по умолчанию для httpListenAddress, либо установить его в --httpListenAddress=0.0.0.0)

Это был брандмауэр Windows. Для старого Jenkins – 1.620 в брандмауэре было правило для Java 6 и порт 80. Новый Jenkins использует Java 8, который был заблокирован.

Изменение правил брандмауэра решило проблему.

Для всех, кто пытается установить Jenkins на Windows с помощью скрипта PowerShell, вот как указать брандмауэру открыть порт:

New-NetFirewallRule -Name jenkins -DisplayName 'Jenkins' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 8080

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

Конечно, давайте разберемся с вашей проблемой более детально.

Вы обновили Jenkins с версии 1.620 до 2.62 и столкнулись с проблемами доступа к Jenkins-серверу извне. На первый взгляд, проблема кажется связанной с адресом прослушивания, но, как оказалось, корень проблемы лежит в настройках вашей системы Windows, в частности в правилах межсетевого экрана.

Основные шаги для решения проблемы

  1. Проверка параметров адреса прослушивания Jenkins:

    • Для открытого доступа к Jenkins на всех интерфейсах ваша команда запуска должна включать параметр --httpListenAddress=0.0.0.0. Это позволяет серверу принимать подключения на всех доступных сетевых интерфейсах.
  2. Анализ конфигурации Windows Firewall:

    • Обновление компонентов Jenkins, в том числе используемой версии Java, может приводить к блокировке на уровне межсетевого экрана. В вашем случае, новая версия Java 8 не была внесена в разрешенные правила на порту 80.
  3. Обновление правил межсетевого экрана:

    • Создайте новое правило для межсетевого экрана Windows, чтобы разрешить входящие соединения на нужном порту. Используйте следующую команду PowerShell:
      New-NetFirewallRule -Name jenkins -DisplayName 'Jenkins' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 8080
    • Обратите внимание, что в вашем случае порт может быть другим (например, 80), в зависимости от настроек, которые вы используете для Jenkins.

Дополнительные рекомендации

  • Регулярно проверяйте и обновляйте конфигурацию межсетевого экрана: Это важно для поддержания безопасности системы и корректной работы всех сетевых сервисов.

  • Оцените используемую версию Java: Если это возможно, пробуйте поддерживать актуальную версию Java, чтобы избежать проблем с совместимостью и безопасностью.

  • Документируйте изменения в конфигурации системы: Всякие изменения — будь то обновление ПО или изменения в настройках безопасности — должны быть логически задокументированы для последующего анализа и устранения неполадок.

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

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

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