Uploaded image for project: 'Jenkins'
  1. Jenkins
  2. JENKINS-60079

sshScript does not run a batch file on a windows remote

    • Icon: Bug Bug
    • Resolution: Unresolved
    • Icon: Major Major
    • ssh-steps-plugin
    • None
    • Jenkins master 2.164.3 on linux, linux slave as a docker image provisioned with K8S and remote Windows.
      Slave is connected to master through JNLP.

      I create a simple batch file named script.bat with a dir command within.
      I want to execute it from a Linux slave using the sshScript step with :
      sshScript remote: remote, script:'script.bat'

      It fails and display a stack trace (see below).

      As checking steps :

      • The same script.bat correctly runs with a ssh command executed from a git bash on my laptop.
      • Also, it runs correctly with sshPut + sshCommand (and an awfull sleep workaround to get stdout) within a pipeline.
      • sshScript, with a .sh file on a remote Linux machine also runs correctly

       

      Here is the trace :

      Also:   hudson.remoting.Channel$CallSiteStackTrace: Remote call to JNLP4-connect connection from 10.225.94.76/10.225.94.76:52554
      		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)
      	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      	at java.lang.reflect.Method.invoke(Method.java:498)
      	at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
      	at org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite$StaticMetaMethodSiteNoUnwrapNoCoerce.invoke(StaticMetaMethodSite.java:151)
      	at org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite.call(StaticMetaMethodSite.java:91)
      	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:141)
      	at org.hidetake.groovy.ssh.session.execution.Command$Trait$Helper.execute(Command.groovy:30)
      	at org.hidetake.groovy.ssh.session.execution.Command$Trait$Helper$execute$0.call(Unknown Source)
      	at org.hidetake.groovy.ssh.session.SessionHandler.execute(SessionHandler.groovy)
      	at org.hidetake.groovy.ssh.session.execution.Command$execute.call(Unknown Source)
      	at org.hidetake.groovy.ssh.session.execution.Script$Trait$Helper.executeScript(Script.groovy:25)
      	at org.hidetake.groovy.ssh.session.execution.Script$Trait$Helper$executeScript$0.call(Unknown Source)
      	at org.hidetake.groovy.ssh.session.SessionHandler.executeScript(SessionHandler.groovy)
      	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      	at java.lang.reflect.Method.invoke(Method.java:498)
      	at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoCachedMethodSite.invoke(PogoMetaMethodSite.java:169)
      	at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.call(PogoMetaMethodSite.java:71)
      	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:133)
      	at org.hidetake.groovy.ssh.session.execution.Script$Trait$Helper.executeScript(Script.groovy)
      	at org.hidetake.groovy.ssh.session.execution.Script$Trait$Helper$executeScript.call(Unknown Source)
      	at org.hidetake.groovy.ssh.session.SessionHandler.executeScript(SessionHandler.groovy)
      	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      	at java.lang.reflect.Method.invoke(Method.java:498)
      	at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
      	at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
      	at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:384)
      	at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1022)
      	at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:69)
      	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:166)
      	at org.jenkinsci.plugins.sshsteps.SSHService$_executeScriptFromFile_closure4$_closure14.doCall(SSHService.groovy:198)
      	at org.jenkinsci.plugins.sshsteps.SSHService$_executeScriptFromFile_closure4$_closure14.doCall(SSHService.groovy)
      	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      	at java.lang.reflect.Method.invoke(Method.java:498)
      	at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
      	at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
      	at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:294)
      	at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1022)
      	at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:42)
      	at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
      	at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:57)
      	at org.hidetake.groovy.ssh.util.Utility.callWithDelegate(Utility.groovy:17)
      	at sun.reflect.GeneratedMethodAccessor66.invoke(Unknown Source)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      	at java.lang.reflect.Method.invoke(Method.java:498)
      	at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
      	at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
      	at org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite.invoke(StaticMetaMethodSite.java:46)
      	at org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite.callStatic(StaticMetaMethodSite.java:102)
      	at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallStatic(CallSiteArray.java:56)
      	at org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite.callStatic(StaticMetaMethodSite.java:104)
      	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:214)
      	at org.hidetake.groovy.ssh.session.SessionTask.wetRun(SessionTask.groovy:64)
      	at org.hidetake.groovy.ssh.session.SessionTask.call(SessionTask.groovy:48)
      	at java_util_concurrent_Callable$call.call(Unknown Source)
      	at org.hidetake.groovy.ssh.core.Service.run(Service.groovy:81)
      	at org.hidetake.groovy.ssh.core.Service$run$0.call(Unknown Source)
      	at org.jenkinsci.plugins.sshsteps.SSHService.executeScriptFromFile(SSHService.groovy:196)
      	at org.jenkinsci.plugins.sshsteps.steps.ScriptStep$Execution$ScriptCallable.execute(ScriptStep.java:95)
      	at org.jenkinsci.plugins.sshsteps.util.SSHMasterToSlaveCallable.call(SSHMasterToSlaveCallable.java:32)
      	at hudson.remoting.UserRequest.perform(UserRequest.java:212)
      	at hudson.remoting.UserRequest.perform(UserRequest.java:54)
      	at hudson.remoting.Request$2.run(Request.java:369)
      	at hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:72)
      	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)
      	at hudson.remoting.Engine$1.lambda$newThread$0(Engine.java:93)
      	at java.lang.Thread.run(Thread.java:748)
      

      Strangely, the "Also" follows... nothing else in terms of error or exception.
      And there is a strange message involving sh :
      org.hidetake.groovy.ssh.session.BadExitStatusException: Command returned exit status 1: /bin/sh

          [JENKINS-60079] sshScript does not run a batch file on a windows remote

          I don't think Linux can execute windows commands yet unless if the Linux that you are running is special has some sort of that functionality.

          If you are trying to run this pipeline on windows node make sure it has ssh server installed as it doesn't come along by default. And also take note this plugin is not tested or not targetted to run anything on windows yet.

          Naresh Rayapati added a comment - I don't think Linux can execute windows commands yet unless if the Linux that you are running is special has some sort of that functionality. If you are trying to run this pipeline on windows node make sure it has ssh server installed as it doesn't come along by default. And also take note this plugin is not tested or not targetted to run anything on windows yet.

          jlpinardon added a comment -

          Well, perhaps I have not been clear enough.
          The node is a linux machine, but the remote machine to which I want to run a file through ssh is a Windows machine.
          As I said, I can run the bat file on the windows machine running ssh on the command line.
          And the same bat file runs OK when I run two ssh steps : sshPut + sshCommand.
          But it fails to execute the bat with a sshScript.

          jlpinardon added a comment - Well, perhaps I have not been clear enough. The node is a linux machine, but the remote machine to which I want to run a file through ssh is a Windows machine. As I said, I can run the bat file on the windows machine running ssh on the command line. And the same bat file runs OK when I run two ssh steps : sshPut + sshCommand. But it fails to execute the bat with a sshScript.

            nrayapati Naresh Rayapati
            jlpinardon jlpinardon
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated: