2016-03-03 7 views
2

У нас есть экземпляр Jenkins, работающий на Ubuntu, который имеет несколько подчиненных устройств в разных системах. Один из них - хост Windows 7, имеющий дочерний экземпляр jenkins, настроенный как служба.Дженкинс не признает, что ведомое устройство не работает и, следовательно, не позволяет повторно подключиться

У нас есть проблема, что, когда эта машина перезагружается, мастер Дженкинс не понимает, что ее нет. В представлении узлов это выглядит просто отлично. Затем, когда выдается сборка, которая должна использовать этот подчиненный, она застревает. Если это прекращается, следующая сборка не удается сразу

Caused by: java.util.concurrent.TimeoutException: Ping started at 1457016721684 hasn't completed by 1457016961684 
    ... 2 more 
[EnvInject] - [ERROR] - SEVERE ERROR occurs: channel is already closed 

Когда раб начал и он пытается подключиться обратно к хозяину, соединение отказано, и в журналах есть ошибка говоря связь с этим именем и без того существует:

Server didn't accept the handshake: xxx is already connected to this master. Rejecting this connection. 

существует проблема JENKINS-5055, который утверждает, что исправление было совершено позволяя же JNLP рабыню восстановить без получения отвергнута, по-видимому this commit, и в соответствии с changelog, она была введена в версии 1.396 (2011/02/02). Однако мы используем версию 1.639 и видим это. Somebody else, похоже, это и есть. Посмотрев на current codebase, я вижу where the error is coming from, но не вижу исправления, сделанного в Jenkins-5055.

Любые идеи по разрешению этого вопроса?

Редактировать: также asked on jenkins user mailing list, но ответов нет.

ответ

0

Переустановка ведомого устройства на машине Windows Server 2012 R2 не обнаруживает признаков этого поведения, поэтому, по-видимому, была допущена ошибка во время установки или это было вызвано использованием рабочей станции Windows.

Несмотря на это, здесь были шаги, чтобы получить его работу, предполагая совершенно новую установку Windows, без каких-либо сетевого подключения, и мастер-экземпляр с помощью самоподписанного сертификата:

  1. Установка JRE на машине. Если у вас 64-разрядная операционная система, установите 32-разрядную и 64-разрядную версии, в противном случае используйте 32-разрядную версию. Ссылка для скачивания here
  2. Установите .NET 3.5 на компьютер. Это необходимо службе Дженкинса. Вы можете выполнить шаги, описанные my other answer.
  3. Установите Jenkins с помощью установщика Windows (.zipped) в C: \ Jenkins. Его можно скачать с here.
  4. Проверьте, отвечает ли ваша установка, перейдя по ссылке http://localhost:8080. В случае возникновения проблем проверьте наличие журналов в папке jenkins. Если есть конфликт портов, отредактируйте файл jenkins.xml и измените httpPort на что-то еще.
  5. На компьютере с ОС Windows перейдите к своим основным дженкинсам и настройте там новый узел.
  6. Запустите ведомый агент с помощью Java Launch Agent в окне configure -> node (вам все равно нужно использовать ваш подчиненный компьютер Windows)
  7. Вы должны увидеть видимое открытие окна. Оттуда выберите Файл -> Установить как услугу. (details and screenshots) Если у вас возникла ошибка без правильного объяснения, убедитесь, что .NET 3.5 правильно установлен. Если вы видите «WMI.WmiException: AccessDenied ", сохраните файл jnlp локально и запустите его из приглашения администратора или иным образом с повышенными привилегиями (details).
  8. Из административных средств -> Сервисы, остановить и отключить службу Jenkins и остановить Jenkins Slave Agent, но оставить это на автоматике, так что запускается при запуске компьютера
  9. Это относится только если вы используете самозаверяющее или иначе проблематичное сертификат:.
    1. скачать файл ранее упомянутая Java Запуск агент (. jnlp file) и сохраните его до C: \ jenkins
    2. Откройте c: \ jenkins \ jenkins-slave.xml в своем редакторе
    3. изменить это ссылаться на локальный файл .jnlp путем изменений JNLP параметр URL (файл:/C: /jenkins/jenkins-slave.jnlp)
    4. добавить -noCertificateCheck к параметрам
    5. заменить -secret параметра с -auth «пользователь: проход», так как в противном случае автоматический URL получить будут добавлены параметры, которые будут беспорядок найти файл .jnlp
  10. Запустите службу Дженкинс Подчиненный агент снова

в случае возникновения проблем с Дженкинс ведомой службы , проверьте jenki нс-slave.err.log. Для Windows Server 2012 R2 вы можете получить функциональность хвоста, используя Get-Content .\jenkins-slave.err.log -Wait -Tail 10 в командной строке Powershell. Для более старых версий Powershell, оставьте в поле зрения -Tail 10.

1

Мы столкнулись с той же проблемой. Используется https://wiki.jenkins-ci.org/display/JENKINS/slave-status как обход

+0

Благодарим за ответ! Однако я не совсем понял, разве это не просто показ информации, как это устранит проблему? – eis

+0

Да, это просто показывается. Мы запрашиваем эту страницу из cronjob и перезапускаем ведомый, если его статус не запущен. – user1700494

+1

Хорошо. С моей проблемой перезапуск ведомого устройства, похоже, не исправляет его, поскольку мастер утверждает, что он уже подключен, поэтому, я думаю, у меня есть двойная проблема. : / – eis