Выполнить пакетную команду Windows из Jenkins не удается, но в cmd.exe работает нормально

Я пытаюсь запустить эту команду в jenkins после MSbuild

xcopy "C:\Program Files (x86)\Jenkins\workspace\trunk\Projects\results\results\obj\Debug\Package\PackageTmp" "Y:\Extraction_Zone\Jenkins\" /E 

Y: подключенный сетевой диск. Это отлично работает в cmd.exe, но при попытке запустить его в Jenkins я получаю сообщение об ошибке Invalid drive specification.

Вот вывод Дженкинса:

Time Elapsed 00:00:04.03
[trunk] $ cmd /c call C:\Windows\TEMP\hudson3389873107474371072.bat

C:\Program Files (x86)\Jenkins\workspace\trunk>xcopy "C:\Program Files (x86)\Jenkins\workspace\trunk\Projects\results\results\obj\Debug\Package\PackageTmp" "Y:\Extraction_Zone\Jenkins\" /E 
Invalid drive specification
0 File(s) copied

C:\Program Files (x86)\Jenkins\workspace\trunk>exit 4 
Build step 'Execute Windows batch command' marked build as failure
Finished: FAILURE

Любая помощь будет оценена по достоинству.


person Chris    schedule 08.06.2012    source источник
comment
Разве Дженкинс не работает как служба? Если это так, вам следует устранить проблему, указав сетевой путь вместо подключенного диска.   -  person Steve B    schedule 08.06.2012
comment
Y: вероятно, привязан к конкретному пользователю. Jenkins, вероятно, работает под своей собственной «служебной учетной записью» без доступа к этой букве диска Y :? Вы можете попробовать использовать путь UNC вместо Y:, то есть \\ServerName\Folder\Extraction_zone\Jenkins\   -  person JMC    schedule 08.06.2012
comment
Спасибо за ответы. Я пробовал это, но мне отказывают в доступе: Time Elapsed 00:00:03.70 [trunk] $ cmd /c call C:\Windows\TEMP\hudson7535872922876977589.bat C:\Program Files (x86)\Jenkins\workspace\trunk>xcopy "C:\Program Files (x86)\Jenkins\workspace\trunk\Projects\results\results\obj\Debug\Package\PackageTmp" "\\COMP-NAME\Webs\Extraction_Zone" /E Access denied Unable to create directory - \\COMP-NAME\Webs\Extraction_Zone 0 File(s) copied C:\Program Files (x86)\Jenkins\workspace\trunk>exit 4 Build step 'Execute Windows batch command' marked build as failure Finished: FAILURE   -  person Chris    schedule 08.06.2012
comment
Я понял, что забыл часть пути \ Jenkins, но все равно получаю ошибку «Недопустимая спецификация диска»: C:\Program Files (x86)\Jenkins\workspace\trunk>xcopy "C:\Program Files (x86)\Jenkins\workspace\trunk\Projects\results\results\obj\Debug\Package\PackageTmp" "\\COMP-NAME\Webs\Extraction_Zone\Jenkins\" /E Invalid drive specification   -  person Chris    schedule 08.06.2012
comment
Вы решили это? Я сталкиваюсь с чем-то похожим (поведение Дженкинса отличается от командной строки)   -  person Kohanz    schedule 11.02.2013


Ответы (7)


У меня тоже когда-то была аналогичная проблема. Попробуйте предоставить службе Jenkins «Вход в систему под этой учетной записью» прямо под services.msc и убедитесь, что введенная вами учетная запись совпадает с той, которую вы используете для запуска cmd.exe.

введите здесь описание изображения

person adarshr    schedule 08.06.2012
comment
Это, похоже, не сработало. Я попытался войти в систему как администратор, но я получаю ту же ошибку. - person Chris; 08.06.2012
comment
Я бегу со своей рабочей машины, и у меня была такая же проблема. Я сделал, как предложил @adarshr, и использовал эту учетную запись и обзор ... затем просмотрел информацию и пароль моей корпоративной учетной записи AD. Работал как шарм! - person TWhite; 13.03.2014
comment
у меня была проблема с этим: после смены пользователя служба запускалась, а затем останавливалась. проверьте средство просмотра событий для получения дополнительной информации. в моем случае у моего пользователя не было доступа к C:\program files\jenkins - person DLeh; 17.03.2015
comment
Если вы пришли сюда через параметры GIT, которые не работают в вашем пакете, но работают в cmd.exe: Issues.jenkins-ci.org/browse/JENKINS-34082 - person Peter PitLock; 24.05.2017

Эти команды, основанные на файлах Java JAR, сработали для меня:
cmd
net use x: \\
xcopy "dist\" x:\ /Y

И это Это! Я потратил много времени на решение этой проблемы, и ничего не работало, пока я не написал CMD и NET USE!
Мне не нужно было ни менять разрешение на службу jenkins, ни использовать команду runas.

Но я должен упомянуть, что у всех был доступ для чтения и записи к сетевому диску.

person Jiří    schedule 06.04.2014
comment
Это заставило это работать и для меня (согласно ответу @adarshr, у меня уже был сервер jenkins). Для удобства чтения вторая строка означает net use x: \\yournetworkshare\foldername - person Schaki; 13.05.2015
comment
Это также исправило мои скрипты Python, которые пытались записать в сетевое расположение. Изменение/обновление пользователя входа в систему не помогло... - person radix07; 24.08.2018

У меня была такая же проблема с моей задачей Windows, запускающей пакетный файл (я знаю, что это не совсем то же самое), когда я пытался скопировать файл в сетевое расположение, то есть на общий диск. Я также использовал путь UNC и сопоставленный диск, но ошибка была такой же. Для меня это была ошибка номер 4 - код ошибки MS DOS. Решение заключалось в использовании команды net use! Надеюсь, что это поможет.

person user3104116    schedule 17.12.2013

Легкое исправление для большинства вещей.

  1. Сделайте пакетную команду с тем, что вы пытаетесь запустить, filename.bat с текстом командной строки внутри.
  2. Создайте обычный ярлык Windows для пакетной команды, отредактируйте дополнительные свойства ярлыков и установите флажок «Запуск от имени администратора» (сложно, сложно).
  3. Теперь запустите ярлык filename.lnk из вызова командной строки jenkins, это поможет вам обойти весь джаз.

:)

person James Stevenson    schedule 27.07.2017
comment
«C:\your.lnk» не распознается как внутренняя или внешняя команда. Это то, что ты получаешь ;) - person Davut Gürbüz; 04.08.2019

Решение adarshr (т. е. изменение учетных данных службы) помогло мне решить часть проблемы: в моем случае это позволило мне успешно проверить репозиторий mercurial (используя протокол ssh), что я мог не делать при использовании «Локальной системной учетной записи».

Тем не менее, у меня все еще есть различное поведение между запуском сценария командной строки или запуском одного и того же сценария из сценария jenkins «выполнить оболочку» в разделе сборки. В моем случае я компилирую расширение Python. В Jenkins я не могу импортировать расширение (ошибки не вижу, но выполнение просто останавливается, поэтому подозреваю, что оно вылетает).

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

Итак, по крайней мере, в моем случае ясно, что это проблема учетных данных.

Документация по использованию учетных данных: https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+CLI

person mfiers    schedule 14.05.2013

Я решил свою проблему с помощью плагина CIFS.

person swist    schedule 19.03.2015

Столкнулся с похожей проблемой и нашел два пути решения.

Тип 1: Сообщите Дженкинсу о подключенном диске. 1. Перейти -> Управление Jenkins -> Консоль сценариев (Groovy Script). 2. Запустите команду ниже

 def mapdrive = "net use Y: \\\\copy_nework_address"
 mapdrive.execute();
 println "net use".execute().getText()

Тип: 2 1. Goto -> cmd -> запустить «net use», чтобы узнать сетевой адрес

xcopy "C:\Program Files (x86)\Jenkins\workspace\trunk\Projects\results\results\obj\Debug\Package\PackageTmp" "Copy_Network_Address\Extraction_Zone\Jenkins\" /E

Вывод: - Я предпочитаю 2-й тип, так как после каждого перезапуска я должен запускать Groovy Script.

person Community    schedule 25.01.2017