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

Timeout: Unexpected build status after interrupting shell script

    • Icon: Bug Bug
    • Resolution: Unresolved
    • Icon: Minor Minor
    • None
    • Jenkins 2.103 (.war) with Pipeline 2.5 on Fedora 26, Oracle JDK 1.8.0_121.

      When a timeout interrupts a shell script (bash in my case), the build result is set to failure instead of the expected aborted.

      Example (also true for scripted pipelines):

      pipeline {
          agent any
      
          options {
              timeout(time: 3, unit: 'SECONDS')
          }
      
          stages{
              stage('run') {
                  steps {
                      sh 'sleep 5'
                      // working:
                      // sleep(time: 5, unit: 'SECONDS')
                  }
              }
          }
      }
      

      Output:

      Started by user admin
      Running in Durability level: MAX_SURVIVABILITY
      [Pipeline] node
      Running on Jenkins in /mnt/data/jenkins-weekly/jenkins_home/workspace/timeout-pipeline
      [Pipeline] {
      [Pipeline] timeout
      Timeout set to expire in 3 sec
      [Pipeline] {
      [Pipeline] stage
      [Pipeline] { (run)
      [Pipeline] sh
      [timeout-pipeline] Running shell script
      + sleep 5
      Cancelling nested steps due to timeout
      Sending interrupt signal to process
      sh: line 1: 32445 Terminated              JENKINS_SERVER_COOKIE=$jsc '/mnt/data/jenkins-weekly/jenkins_home/workspace/timeout-pipeline@tmp/durable-7559496c/script.sh' > '/mnt/data/jenkins-weekly/jenkins_home/workspace/timeout-pipeline@tmp/durable-7559496c/jenkins-log.txt' 2>&1
      [Pipeline] }
      [Pipeline] // stage
      [Pipeline] }
      [Pipeline] // timeout
      [Pipeline] }
      [Pipeline] // node
      [Pipeline] End of Pipeline
      ERROR: script returned exit code 143
      Finished: FAILURE
      

          [JENKINS-49157] Timeout: Unexpected build status after interrupting shell script

          Franz Kaefer created issue -
          Andrew Bayer made changes -
          Component/s New: workflow-basic-steps-plugin [ 21712 ]
          Component/s Original: pipeline [ 21692 ]

          Andrew Bayer added a comment -

          Are you only seeing this with shell steps, and not other steps (like, say, sleep)?

          Andrew Bayer added a comment - Are you only seeing this with shell steps, and not other steps (like, say, sleep )?

          Andrew Bayer added a comment -

          Just verified that this is the case with sh but not with sleep, so it's probably something in workflow-durable-task...

          Andrew Bayer added a comment - Just verified that this is the case with sh but not with sleep , so it's probably something in workflow-durable-task ...

          Andrew Bayer added a comment -

          So it looks like DurableTaskStep.Execution#check() is still getting called after DurableTaskStep.Execution#stop(Throwable) has been called, so the durable task/shell step is being killed before the timeout gets to actually kill it...

          Andrew Bayer added a comment - So it looks like DurableTaskStep.Execution#check() is still getting called after DurableTaskStep.Execution#stop(Throwable) has been called, so the durable task/shell step is being killed before the timeout gets to actually kill it...
          Andrew Bayer made changes -
          Component/s New: workflow-durable-task-step-plugin [ 21715 ]
          Component/s Original: workflow-basic-steps-plugin [ 21712 ]

          This is really annoying, there is no option to check whetever the job time out or not

           

           

          roel postelmans added a comment - This is really annoying, there is no option to check whetever the job time out or not    

          To add note some more dangerous behaviour:

          steps {
            writeFile file: 'test.ps1', text: 'start-sleep 100'   
            timeout(time: 10, unit: 'SECONDS') {
                bat "@Powershell -Noninteractive -File \"${WORKSPACE}\\test.ps1\"" 
            }
          }
          

          This run on an windows agent will lead sometimes to success

          Stefan Angerer added a comment - To add note some more dangerous behaviour: steps {  writeFile file: 'test.ps1' , text: 'start-sleep 100'     timeout(time: 10, unit: 'SECONDS' ) {   bat "@Powershell -Noninteractive -File \" ${WORKSPACE}\\test.ps1\"" } } This run on an windows agent will lead sometimes to success

            Unassigned Unassigned
            kgerstl Franz Kaefer
            Votes:
            2 Vote for this issue
            Watchers:
            7 Start watching this issue

              Created:
              Updated: