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

BourneShellScript fails on Cygwin due to use of slashes vs. backslashes

    Details

    • Type: Bug
    • Status: Resolved (View Workflow)
    • Priority: Critical
    • Resolution: Fixed
    • Component/s: durable-task-plugin
    • Labels:
    • Environment:
      Latest jenkins on linux, Windows agent via jnlp slave agent
    • Similar Issues:

      Description

      This is related but not the same as JENKINS-33708 .

      I'm trying to run pipeline code on windows via cygwin bash:

      stage("test") {
          node("windows"){
              sh """#!/bin/bash
              echo hello world"""
          }
      }
      

      The output of the workflow looks like that:

      [c:\b\workspace\test_wintendo_pipeline] Running shell script
      sh: c:\b\workspace\test_wintendo_pipeline@tmp\durable-4da51fcf\script.sh: command not found
      

      After some fiddling with procmon I insulated what it was actually doing:

      nohup sh -c "echo $$ > 'c:\b\workspace\test_wintendo_pipeline@tmp\durable-4da51fcf\pid'; jsc=durable-6eaaad0f799f776c331f1724d18dab7f; JENKINS_SERVER_COOKIE=$jsc 'c:\b\workspace\test_wintendo_pipeline@tmp\durable-4da51fcf\script.sh' > 'c:\b\workspace\test_wintendo_pipeline@tmp\durable-4da51fcf\jenkins-log.txt' 2>&1; echo $? > 'c:\b\workspace\test_wintendo_pipeline@tmp\durable-4da51fcf\jenkins-result.txt'"
      

      Reducing it to what actually causes the error that we see in the scripts output in jenkins:

      sh -c "'c:\b\workspace\durable-bc34ce35\script.sh'"
      sh: c:\b\workspace\durable-bc34ce35\script.sh: command not found
      

      Fixing it seems only be possible by using slashes instead of backslashes:

      sh -c "'c:/b/workspace/durable-bc34ce35/script.sh'"
      + echo hello world
      hello world
      

        Attachments

          Issue Links

            Activity

            dothebart Wilfried Goesgens created issue -
            jglick Jesse Glick made changes -
            Field Original Value New Value
            Description This is related but not the same as JENKINS-33708 .

            I'm trying to run pipeline code on windows via cygwin bash:

            {code:code}
            stage("test") {
                node("windows"){
                    sh """#!/bin/bash
                    echo hello world"""
                }
            }
            {code}

            The output of the workflow looks like that:
            {code:code}
            [c:\b\workspace\test_wintendo_pipeline] Running shell script
            sh: c:\b\workspace\test_wintendo_pipeline@tmp\durable-4da51fcf\script.sh: command not found
            {code}

            After some fiddling with procmon I insulated what it was actually doing:

            {code:code}
            nohup sh -c "echo $$ > 'c:\b\workspace\test_wintendo_pipeline@tmp\durable-4da51fcf\pid'; jsc=durable-6eaaad0f799f776c331f1724d18dab7f; JENKINS_SERVER_COOKIE=$jsc 'c:\b\workspace\test_wintendo_pipeline@tmp\durable-4da51fcf\script.sh' > 'c:\b\workspace\test_wintendo_pipeline@tmp\durable-4da51fcf\jenkins-log.txt' 2>&1; echo $? > 'c:\b\workspace\test_wintendo_pipeline@tmp\durable-4da51fcf\jenkins-result.txt'"
            {code}

            Reducing it to what actually causes the error that we see in the scripts output in jenkins:
            {code:code}
            sh -c "'c:\b\workspace\durable-bc34ce35\script.sh'"
            sh: c:\b\workspace\durable-bc34ce35\script.sh: command not found
            {code}

            Fixing it seems only be possible by using slashes instead of backslashes:

            {code:code}
            sh -c "'c:/b/workspace/durable-bc34ce35/script.sh'"
            + echo hello world
            hello world
            {code}

            This is related but not the same as JENKINS-33708 .

            I'm trying to run pipeline code on windows via cygwin bash:

            {code}
            stage("test") {
                node("windows"){
                    sh """#!/bin/bash
                    echo hello world"""
                }
            }
            {code}

            The output of the workflow looks like that:
            {code:none}
            [c:\b\workspace\test_wintendo_pipeline] Running shell script
            sh: c:\b\workspace\test_wintendo_pipeline@tmp\durable-4da51fcf\script.sh: command not found
            {code}

            After some fiddling with procmon I insulated what it was actually doing:

            {code:none}
            nohup sh -c "echo $$ > 'c:\b\workspace\test_wintendo_pipeline@tmp\durable-4da51fcf\pid'; jsc=durable-6eaaad0f799f776c331f1724d18dab7f; JENKINS_SERVER_COOKIE=$jsc 'c:\b\workspace\test_wintendo_pipeline@tmp\durable-4da51fcf\script.sh' > 'c:\b\workspace\test_wintendo_pipeline@tmp\durable-4da51fcf\jenkins-log.txt' 2>&1; echo $? > 'c:\b\workspace\test_wintendo_pipeline@tmp\durable-4da51fcf\jenkins-result.txt'"
            {code}

            Reducing it to what actually causes the error that we see in the scripts output in jenkins:
            {code:none}
            sh -c "'c:\b\workspace\durable-bc34ce35\script.sh'"
            sh: c:\b\workspace\durable-bc34ce35\script.sh: command not found
            {code}

            Fixing it seems only be possible by using slashes instead of backslashes:

            {code:none}
            sh -c "'c:/b/workspace/durable-bc34ce35/script.sh'"
            + echo hello world
            hello world
            {code}

            jglick Jesse Glick made changes -
            Labels windows
            jglick Jesse Glick made changes -
            Link This issue relates to JENKINS-33708 [ JENKINS-33708 ]
            jglick Jesse Glick made changes -
            Summary Invocation of 'sh' pipeline step fails on windows Invocation of 'sh' pipeline step fails on Windows due to use of slashes vs. backslashes
            jglick Jesse Glick made changes -
            Summary Invocation of 'sh' pipeline step fails on Windows due to use of slashes vs. backslashes BourneShellScript fails on Cygwin due to use of slashes vs. backslashes
            jglick Jesse Glick made changes -
            Remote Link This issue links to "PR 33 (Web Link)" [ 15195 ]
            jglick Jesse Glick made changes -
            Assignee Bertrand Latinville [ blatinville ]
            jglick Jesse Glick made changes -
            Status Open [ 1 ] In Progress [ 3 ]
            jglick Jesse Glick made changes -
            Status In Progress [ 3 ] In Review [ 10005 ]
            jglick Jesse Glick made changes -
            Priority Minor [ 4 ] Critical [ 2 ]
            jglick Jesse Glick made changes -
            Link This issue is duplicated by JENKINS-32017 [ JENKINS-32017 ]
            jglick Jesse Glick made changes -
            Status In Review [ 10005 ] Resolved [ 5 ]
            Resolution Fixed [ 1 ]

              People

              • Assignee:
                blatinville Bertrand Latinville
                Reporter:
                dothebart Wilfried Goesgens
              • Votes:
                2 Vote for this issue
                Watchers:
                4 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: