Difference in timeout handling within a script or a step

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

Difference in timeout handling within a script or a step

christop...@googlemail.com

Hello,

I am experiencing a strange difference with catching a timeout within a script in a step or a script called from a step.

The problem I want to work around: in some situations my unit-test exe (GoogleTest) is blocked with a popup from inside the C-runtime. To make the build complete in this szenario I inserted a timeout and want to catch it.

This is working as expected in a szenario like this:

def testModule() {

       try{                                        
           timeout(time: 30, unit: 'MINUTES') {                
               bat "dmake run-test"
            }
        } catch (err) {
            echo "Caught: ${err}"
            unstable( message: "Test timeout in stage ${STAGE_NAME}" )
        }
}

pipeline {
   ...
   stages {
   ...
stage( 'test' ) {
            steps {
                script{
                    testModule( )
                }
            }
        }    
}
}

When I try this instead:
stage('Test'){
      steps {
         script{
            try{                                        
               timeout(time: 30, unit: 'MINUTES') {                
                            bat "dmake runtest"
                        }
                      } catch (err) {
                        echo "Caught: ${err}"
                        unstable( message: "Test timeout in stage ${STAGE_NAME}" )
                      }
                   }
}}
I get  number of exceptions from execution like this:

" Cancelling nested steps due to timeout
11:44:57 Sending interrupt signal to process
11:45:17 After 20s process did not stop
11:45:18 Also: Also: java.nio.file.FileSystemException: D:\workdir\workspace\
Build-Pipeline@tmp\durable-2328b9da\jenkins-log.txt: The process cannot access the file because it is being used by another process.
11:45:18 11:45:18 at sun.nio.fs.WindowsException.translateToIOException(Unknown Source)
11:45:18 at sun.nio.fs.WindowsException.rethrowAsIOException(Unknown Source)
11:45:18 at sun.nio.fs.WindowsException.rethrowAsIOException(Unknown Source)
11:45:18 at sun.nio.fs.WindowsFileSystemProvider.implDelete(Unknown Source)
11:45:18 at sun.nio.fs.AbstractFileSystemProvider.deleteIfExists(Unknown Source)
11:45:18 at java.nio.file.Files.deleteIfExists(Unknown Source)
11:45:18 at jenkins.util.io.PathRemover.removeOrMakeRemovableThenRemove(PathRemover.java:237)
... "

and also at the very end:
"
Also: hudson.remoting.Channel$CallSiteStackTrace: Remote call to JNLP4-connect connection from server.com/xxx.yyy.zzz.182:pppp 11:46:26 at hudson.remoting.Channel.attachCallSiteStackTrace(Channel.java:1800) 11:46:26 at hudson.remoting.UserRequest$ExceptionResponse.retrieve(UserRequest.java:357) 11:46:26 at hudson.remoting.Channel.call(Channel.java:1001) 11:46:26 at hudson.FilePath.act(FilePath.java:1070)
"

Does anyone have an explenation for thet difference and can give me a workaround?

TIA,
br,
Christoph

--
You received this message because you are subscribed to the Google Groups "Jenkins Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [hidden email].
To view this discussion on the web visit https://groups.google.com/d/msgid/jenkinsci-users/205bbfd4-1316-4665-8f7a-eef646a82534n%40googlegroups.com.