Как запустить скрипт bat на удаленной машине Windows через sshScript из ssh step plugin - PullRequest
0 голосов
/ 06 ноября 2019

У меня есть очень простой файл script.bat, созданный на ведомом устройстве. Если я отправлю его через sshPut и выполню через sshCommand, это будет успешно выполнено. Но если я попытаюсь напрямую отправить и запустить скрипт через sshScript, произойдет сбой с исключением.

Файл script.bat просто содержит команду dir.

Обратите внимание, что карта remoteточно такой же, как тот, что передан в sshPut или sshCommand. Кроме того, я удаляю файл script.bat с пульта, прежде чем пытаться отправить и выполнить его через sshScript, чтобы убедиться в отсутствии конфликта. И я попытался запустить файл .bat с помощью команды ssh в командной строке git bash:

ssh -l <loginname> <winhost> 'script.bat'

Как и ожидалось, он запрашивает пароль и запускает файл bat.

КакДополнительный тест я сделал точно так же (простая команда ls внутри текстового файла, удаленно запускаемого с sshScript), но на удаленном компьютере с Linux, и он работает без проблем.

// This is OK
sshPut remote: remote, from: "script.bat", into: '.'
sshCommand remote: remote, command: '.\\script.bat'
sshCommand remote: remote, command: 'del .\\script.bat'
// This fails
sshScript remote: remote, command: '.\\script.bat'

С sshScript наудаленный хост Windows, сценарий не выполняется и отображается следующая трассировка:

hudson.remoting.Channel$CallSiteStackTrace: Remote call to JNLP4-connect connection from 10.225.122.90/10.225.122.90:44864
        at hudson.remoting.Channel.attachCallSiteStackTrace(Channel.java:1743)
        at hudson.remoting.UserRequest$ExceptionResponse.retrieve(UserRequest.java:357)
        at hudson.remoting.Channel.call(Channel.java:957)
        at org.jenkinsci.plugins.sshsteps.steps.ScriptStep$Execution.run(ScriptStep.java:81)
        at org.jenkinsci.plugins.sshsteps.util.SSHStepExecution.lambda$start$0(SSHStepExecution.java:84)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
org.hidetake.groovy.ssh.session.BadExitStatusException: Command returned exit status 1: /bin/sh
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at org.codehaus.groovy.reflection.CachedConstructor.invoke(CachedConstructor.java:83)
    at org.codehaus.groovy.reflection.CachedConstructor.doConstructorInvoke(CachedConstructor.java:77)
    at org.codehaus.groovy.runtime.callsite.ConstructorSite$ConstructorSiteNoUnwrap.callConstructor(ConstructorSite.java:84)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallConstructor(CallSiteArray.java:60)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:235)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:255)
    at org.hidetake.groovy.ssh.session.execution.Command$Helper.execute(Command.groovy:52)
...etc...
...