it-swarm.com.ru

Выполнить пакетную команду 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

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

12
Chris

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

enter image description here

14
adarshr

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

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

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

3
Jiří

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

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

:)

1
James Stevenson

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

1
user3104116

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

Введите 1: Расскажите Дженкинсу о подключенном диске . 1.Goto -> Управление 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.

0
LearNer

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

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

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

Так что - по крайней мере, в моем случае - ясно, что это проблема с полномочиями.

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

0
mfiers

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

0
swist