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

Cannot set diferent shebang in shell in Docker in pipeline

    Details

    • Similar Issues:

      Description

      With the following pipeline:

      pipeline{
          agent none
          stages{
              stage('deploy') {
                  agent {
                      docker {
                          image 'alpine:latest'
                      }
                  }
                  steps {
                      sh """
                          #!/bin/sh
                          echo foo
                      """
                  }
              }
          }
      }
      

      I get the following output:

      [Pipeline] Start of Pipeline (hide)
      [Pipeline] stage
      [Pipeline] { (deploy)
      [Pipeline] node
      Running on Auto-launched Jenkins NextGen build slave (i-XXX) in /home/jenkins/workspace/XXX
      [Pipeline] {
      [Pipeline] checkout
      Git checkout logs...
      [Pipeline] withEnv
      [Pipeline] {
      [Pipeline] sh
      + docker inspect -f . alpine:latest
      
      Error: No such object: alpine:latest
      [Pipeline] sh
      + docker pull alpine:latest
      latest: Pulling from library/alpine
      bdf0201b3a05: Already exists
      Digest: sha256:28ef97b8686a0b5399129e9b763d5b7e5ff03576aa5580d6f4182a49c5fe1913
      Status: Downloaded newer image for alpine:latest
      [Pipeline] withDockerContainer
      Auto-launched Jenkins XXX build slave (i-XXX) does not seem to be running inside a container
      $ docker run -t -d -u 5130:5130
          -w /home/jenkins/workspace/XXX
          -v /home/jenkins/workspace/XXX:/home/jenkins/workspace/XXX:rw,z
          -v /home/jenkins/workspace/XXX@tmp:/home/jenkins/workspace/XXX@tmp:rw,z
          -e ******** -e ******** -e ******** -e ******** -e ******** -e ********
          -e ******** -e ******** -e ******** -e ******** -e ******** -e ********
          -e ******** -e ******** -e ******** -e ******** -e ******** -e ********
          -e ******** -e ******** -e ******** -e ******** -e ******** -e ********
          -e ******** -e ******** -e ******** -e ******** -e ******** -e ********
          alpine:latest cat
      [Pipeline] {
      [Pipeline] sh
      $ docker top 9d50ea59f9db9cc74075029184bf24c1bff53d180cee8d5b80f291d0c9c3c75d -eo pid,comm
      sh: /bin/bash: not found
      [Pipeline] }
      $ docker stop --time=1 9d50ea59f9db9cc74075029184bf24c1bff53d180cee8d5b80f291d0c9c3c75d
      [Pipeline] // withDockerContainer
      [Pipeline] }
      [Pipeline] // withEnv
      [Pipeline] }
      [Pipeline] // node
      [Pipeline] }
      [Pipeline] // stage
      [Pipeline] End of Pipeline
      

      The Alpine docker image does not contain bash, only sh.

      According to https://jenkins.io/doc/pipeline/steps/workflow-durable-task-step/#sh-shell-script and interpreter selector may be used, but gives no context as to where to place that selector, just shows a shebang. This leaves to believe that my pipeline example is correct.

      The CloudBees support page https://support.cloudbees.com/hc/en-us/articles/215171038-How-do-I-run-a-different-Shell-interpreter-in-a-Pipeline-Script- gives an example, of setting the shebang, but it does so in the node block, which is unrelated to a pipeline. So again the example isn't clear.

      How can one change the Shell used in a job, other than changing the Jenkins system wide default shell?

        Attachments

          Activity

          Hide
          csanchez Carlos Sanchez added a comment -

          have you tried without the new line?

          sh """#!/bin/sh
          
          Show
          csanchez Carlos Sanchez added a comment - have you tried without the new line? sh """#!/bin/sh
          Hide
          ovidiub13 Ovidiu-Florin Bogdan added a comment -

          I have tried just now. It works. I didn't think the newline after """ gets into the executed script.

          Thank you Carlos Sanchez.

          Show
          ovidiub13 Ovidiu-Florin Bogdan added a comment - I have tried just now. It works. I didn't think the newline after """ gets into the executed script. Thank you Carlos Sanchez .

            People

            • Assignee:
              csanchez Carlos Sanchez
              Reporter:
              ovidiub13 Ovidiu-Florin Bogdan
            • Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: