У меня есть очень простой файл 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...