Почему эта работа Дженкинса никогда не завершается?

У меня есть подчиненный Windows 8 jenkins (на самом деле более одного), и я хочу иметь задачу, которая клонирует зеркало репозитория git, если оно не существует, и всегда выбирает последнюю версию.

У меня есть этот шаг «выполнить пакет Windows»:

if not exist "server-reference" (
  git clone --mirror [email protected]:something/somewhere.git server-reference
)
pushd server-reference
git fetch --all
popd
exit /B %ERRORLEVEL%

Вывод консоли для задания доходит до этой точки

c:\jenkins\workspace\thing\server-reference>git fetch --all
Получение источника

и никогда не заканчивается

Если я переключаю выход над выборкой, я получаю ожидаемый выход.

И если я запускаю команды пакетного файла от имени пользователя jenkins в окне Windows, все работает так, как ожидалось. Итак, я (думаю, я) знаю, что git fetch --all работает на ведомом устройстве без запроса ввода

Как изменить этот сценарий, чтобы он завершался, когда Дженкинс запускает его?


person Paul D'Ambra    schedule 11.11.2014    source источник
comment
как догадка, я думаю, что ваш пользователь jenkins не настроен для чтения репо, поэтому скрипт ожидает ввода, который он не может получить. попробуйте войти в систему как пользователь jenkins и запустить скрипт вручную (если вы можете сделать это в Windows). В качестве альтернативы используйте подключаемый модуль git wiki.jenkins-ci.org/display/JENKINS/Git. +Плагин   -  person KeepCalmAndCarryOn    schedule 11.11.2014
comment
У меня была похожая проблема. В моем случае проблема заключалась в том, что консоль запрашивала учетные данные для репо. Подсказка для этого не отображалась в выходной консоли jenkins. Итак, задание было запущено и вечно ждало имя пользователя/пароль.   -  person MichaelS    schedule 11.11.2014
comment
Обновлено, чтобы уточнить, что я почти уверен, что подчиненный Jenkins использует известного пользователя, и этот пользователь может запускать Git   -  person Paul D'Ambra    schedule 11.11.2014


Ответы (1)


Ряд вещей может вызвать эту проблему. Вот вещи, которые работали для меня в прошлом.

  1. Я знаю, что вы указали это выше, но просто для перепроверки: убедитесь, что когда вы запускаете git fetch --all вручную на ведомом компьютере, он не запрашивает пароль. Если это произойдет, Дженкинс застрянет на этом шаге, поэтому вам нужно настроить пару ключей SSH.

  2. Убедитесь, что вы вызываете C:\Program Files (x86)\Git\cmd\git.exe, а не C:\Program Files (x86)\Git\bin\git.exe в Jenkins. Второй может вызвать эту проблему в определенных версиях git.

  3. На подчиненной машине установите для переменной среды HOME значение C:\users\[username], указав имя пользователя вашего пользователя. (Для более старых ОС это было C:\Documents and Settings\[username].) Затем перезапустите службу Jenkins и повторите попытку.

  4. Дважды проверьте, что в разделе «Администрирование» > «Службы» подчиненная служба Jenkins «Вход в систему» ​​настроена для вашего пользователя, а пароль правильный. Если нет, установите эти значения, перезапустите службу Jenkins и повторите попытку.

  5. Если ничего из вышеперечисленного не помогло, попробуйте удалить и переустановить git. И если вы его не используете, попробуйте установить новейшую версию git.

person twasbrillig    schedule 12.11.2014
comment
Ах! Номер 4! Не могу поверить, что я еще не уверен в этом - вот почему я люблю ТАК! Сейчас проверяю :/ - person Paul D'Ambra; 12.11.2014
comment
Вот оно! Как пользователь я мог запустить git, но служба не работала как пользователь. Это была глупая ошибка - спасибо за улов! Думаю, теперь мне нужно сдать значок и клавиатуру :) - person Paul D'Ambra; 12.11.2014