Проблемы с запуском подчиненного агента через Java Web Start on Jenkins - программирование
Подтвердить что ты не робот

Проблемы с запуском подчиненного агента через Java Web Start on Jenkins

Недавно мы обновили Jenkins до последней версии.

и с тех пор ive не смог запустить подчиненные устройства через Java WebStart с помощью командной строки каждый раз, когда я пытаюсь запустить ее, я получаю сообщение об ошибке "Невозможно запустить приложение"

с этим в панели сведений

CouldNotLoadArgumentException[ Could not load file/URL specified: http://MyServer:8080/computer/Slave1/slave-agent.jnlp]
    at com.sun.javaws.Main.launchApp(Unknown Source)
    at com.sun.javaws.Main.continueInSecureThread(Unknown Source)
    at com.sun.javaws.Main.access$000(Unknown Source)
    at com.sun.javaws.Main$1.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

Когда вы просматриваете сайт Дженкинса и обедаете его оттуда, ЭТО РАБОТАЕТ, однако, если вы затем перезапустите окно, тогда командная строка при запуске не сможет выполнить задание.

Это команда, которую я пытаюсь запустить из подчиненного

cd "C:\Program Files (x86)\Java\jre7\bin"
javaws http://MyServer:8080/computer/Slave1/slave-agent.jnlp

Проблема в том, что это работало. Я также попробовал обновление до последней версии Java, но не повезло,

Любая идея?

4b9b3361

Ответ 1

Предполагается, что в большинстве случаев сообщения на форумах Jenkins это новое поведение связано с исправлением проблемы безопасности: https://wiki.jenkins-ci.org/display/SECURITY/Jenkins+Security+Advisory+2013-01-04

Появляются два решения:

  • Загрузите файл JNLP (через браузер, wget, curl, whatever), затем запустите локально - может потребоваться дополнительные параметры.
  • Перейдите к разделу Управление Jenkins → Настроить глобальную безопасность и в соответствии с стратегией авторизации матрицы на основе проектов включите "connect" в разделе "slave", для пользователя "Anonymous". Это оставит вас открытыми для атаки, когда кто-то эмулирует подчиненного (но в моем случае в частной рабочей сети - это не проблема).

Ответ 2

Если вы хотите оставить файл JNLP на главном устройстве, и вы не хотите открывать отверстие для безопасности для анонимных пользователей для подключения в качестве подчиненного устройства, отредактируйте файл jenkins-slave.xml, чтобы добавить параметр -jnlpCredentials с опцией -jnlpUrl:

-jnlpCredentials {user}:{apiKey}

где:
пользователь является именем пользователя в базе данных аккаунта Jenkins
apiKey - это ключ пользовательского API (обратите внимание, что это НЕ пароль пользователя)

Чтобы получить ключ API для пользователя, перейдите к:

http://SERVER/user/USER/configure

и нажмите кнопку, чтобы отобразить этот ключ API-пользователя.

Ответ 3

Для меня я должен был убедиться, что у меня есть "анонимный" набор подключений в разрешениях матрицы jenkins. И мне пришлось взломать JNLP файл, который отправляется с мастера.

Я бы сказал, что это ошибка в Jenkins в 2.19.2. В основном, в файле JNLP, который сбрасывается с сервера, аргумент туннелирования, который содержит главный ip и порт, заменяется только ведомым ip-addr.

См. код для engine.java, [строка # 308], в котором исключение выбрано из:

https://searchcode.com/codesearch/view/65603521/

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

Первоначально мой JNLP файл выглядел так:

<jnlp codebase="http://jenkins-master-ip-addr:8080/computer/Node1/" spec="1.0+">
<information>
    <title>Agent for Node1</title>
    <vendor>Jenkins project</vendor>
    <homepage href="https://jenkins-ci.org/"/>
</information>
<security>
    <all-permissions/>
</security>
<resources>
    <j2se version="1.7+"/>
    <jar href="http://jenkins-master-ip-addr:8080/jnlpJars/remoting.jar"/>
    <property name="hudson.showWindowsServiceInstallLink" value="true"/>
</resources>
<application-desc main-class="hudson.remoting.jnlp.Main">

    <argument>b16fdf4388d98e4be6910218cfb5a9b5fa999bcd8dec90264e525171a3b02fce</argument>
    <argument>Node1</argument>

    <argument>-tunnel</argument>
    <argument>jenkins-slave-ip-addr</argument>

    <argument>-url</argument>
    <argument>http://jenkins-master-ip-addr:8080/</argument>

</application-desc>

Проблема заключается в следующем: "-tunnel" arg. Он содержит только SLAVE-машину ip-addr. ИЗМЕНИТЬ это к машине MASTER ip-add AND PORT, исправил ее! Внизу:

    <argument>-tunnel</argument>
    <argument>jenkins-master-ip-addr:9080</argument>

Ответ 4

Проверьте, совпадают ли имена Slave1 в командной строке и jenkins node. Это должно быть Slave1 в jenkins node также