New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[JENKINS-42048] Fix durable pipeline PID NumberFormatException #157

Merged
merged 11 commits into from Jul 12, 2017

Conversation

Projects
None yet
7 participants
@carlossg

carlossg commented May 4, 2017

JENKINS-42048

Fix the command execution so the pid is correctly stored in the pid file
Use nohup so processes can survive disconnection
Add test for ContainerExecDecorator

The problem is that we still need a way to get the exit code from the commands to return it in ContainerExecProc#join.
I don't see any other way than to print it to the output and parse it.

In the meantime there are a lot of warnings in the log

May 04, 2017 8:20:49 PM org.jenkinsci.plugins.durabletask.ProcessLiveness isAlive
WARNING: org.csanchez.jenkins.plugins.kubernetes.pipeline.ContainerExecDecorator$1@30f365ca; decorates hudson.Launcher$RemoteLauncher@7870506a on hudson.remoting.Channel@20b6d163:Channel to /192.168.64.8 does not seem able to determine whether processes are alive or not
[JENKINS-42048] Fix durable pipeline PID NumberFormatException
Fix the command execution so the pid is correctly stored in the pid file
Use nohup so processes can survive disconnection
Add test for ContainerExecDecorator

@carlossg carlossg requested a review from iocanel May 4, 2017

@carlossg

This comment has been minimized.

Show comment
Hide comment
@carlossg

carlossg May 4, 2017

The warnings come from https://github.com/jenkinsci/durable-task-plugin/blob/master/src/main/java/org/jenkinsci/plugins/durabletask/ProcessLiveness.java#L87 where it executes ps -o pid= 9999 and we always return 0 in ContainerExecProc#join

In any case that command will always return 0 in busybox, and maybe the same in other distros. Something to have into account

carlossg commented May 4, 2017

The warnings come from https://github.com/jenkinsci/durable-task-plugin/blob/master/src/main/java/org/jenkinsci/plugins/durabletask/ProcessLiveness.java#L87 where it executes ps -o pid= 9999 and we always return 0 in ContainerExecProc#join

In any case that command will always return 0 in busybox, and maybe the same in other distros. Something to have into account

@iocanel

iocanel approved these changes May 5, 2017

It looks good to me!

proc = new ContainerExecProc(watch, alive, finished);
return proc;
}
@Override
public void kill(Map<String, String> modelEnvVars) throws IOException, InterruptedException {
// String cookie = modelEnvVars.get(COOKIE_VAR);
// TODO we need to use the cookie for something

This comment has been minimized.

@iocanel

iocanel May 5, 2017

I don't really understand that comment.

@iocanel

iocanel May 5, 2017

I don't really understand that comment.

This comment has been minimized.

@carlossg

carlossg May 5, 2017

I think this is what @jglick was referring to in the initial PR, IIUC we need to use the cookie to know what process to kill

@carlossg

carlossg May 5, 2017

I think this is what @jglick was referring to in the initial PR, IIUC we need to use the cookie to know what process to kill

@carlossg

This comment has been minimized.

Show comment
Hide comment
@carlossg

carlossg May 5, 2017

@iocanel do you know if there is a way to get the exit code of a command launched through the exec api ? I've only seen methods to get input and output

carlossg commented May 5, 2017

@iocanel do you know if there is a way to get the exit code of a command launched through the exec api ? I've only seen methods to get input and output

@carlossg

This comment has been minimized.

Show comment
Hide comment
@carlossg

carlossg May 5, 2017

we already do that. But we are just piping chars to the server and reading the output.
My only idea is to send an echo $? to get the exit code and then parse the output

carlossg commented May 5, 2017

we already do that. But we are just piping chars to the server and reading the output.
My only idea is to send an echo $? to get the exit code and then parse the output

@iocanel

This comment has been minimized.

Show comment
Hide comment
@iocanel

iocanel May 5, 2017

@carlossg: can't we just grab the value from the onClose method?

iocanel commented May 5, 2017

@carlossg: can't we just grab the value from the onClose method?

@iocanel

This comment has been minimized.

Show comment
Hide comment
@iocanel

iocanel May 5, 2017

I guess that this code, is related to websockets rather than the exec itself.

iocanel commented May 5, 2017

I guess that this code, is related to websockets rather than the exec itself.

@carlossg carlossg referenced this pull request Jun 9, 2017

Merged

Port mapping #165

@carlossg

This comment has been minimized.

Show comment
Hide comment
@carlossg

carlossg Jun 9, 2017

@iocanel can you take a look again, this is working for me in multicontainer example.
Only kill needs to be implemented, but I'll leave it for later

carlossg commented Jun 9, 2017

@iocanel can you take a look again, this is working for me in multicontainer example.
Only kill needs to be implemented, but I'll leave it for later

@iocanel

This comment has been minimized.

Show comment
Hide comment
@iocanel

iocanel Jun 9, 2017

Will look again shortly!

iocanel commented Jun 9, 2017

Will look again shortly!

@jwhitcraft

This comment has been minimized.

Show comment
Hide comment
@jwhitcraft

jwhitcraft Jun 13, 2017

@carlossg and @iocanel

I just tried this on my test server I and i'm seeing this warning popup more that i think it should be.

Jun 13, 2017 4:11:53 PM WARNING org.csanchez.jenkins.plugins.kubernetes.pipeline.ContainerExecDecorator$ExitCodeOutputStream getExitCode
Unable to find "EXITCODE" in ODE   1exit

Edit here is the full log from all the org.csanchez.jenkins.plugins.kubernetes.pipeline.* Classes

Jun 13, 2017 4:43:26 PM FINE org.csanchez.jenkins.plugins.kubernetes.pipeline.ContainerStepExecution Starting container step. Jun 13, 2017 4:43:37 PM FINEST org.csanchez.jenkins.plugins.kubernetes.pipeline.ContainerExecDecorator Executing shell script inside container [nomad] of pod [jenkins-slave-pk7xk-hln0x] Jun 13, 2017 4:43:37 PM FINEST org.csanchez.jenkins.plugins.kubernetes.pipeline.ContainerExecDecorator Executing command: "nohup" "sh" "-c" "echo \$\$ > '/home/jenkins/workspace/nomad_test/sources@tmp/durable-0cf6fafa/pid'; jsc=durable-8933846f6b831b7e2e6e882ff1d98d5c; JENKINS_SERVER_COOKIE=\$jsc '/home/jenkins/workspace/nomad_test/sources@tmp/durable-0cf6fafa/script.sh' > '/home/jenkins/workspace/nomad_test/sources@tmp/durable-0cf6fafa/jenkins-log.txt' 2>&1; echo \$? > '/home/jenkins/workspace/nomad_test/sources@tmp/durable-0cf6fafa/jenkins-result.txt'" printf "EXITCODE %3d" $?; exit

Jun 13, 2017 4:43:37 PM FINEST org.csanchez.jenkins.plugins.kubernetes.pipeline.ContainerExecDecorator
Executing shell script inside container [nomad] of pod [jenkins-slave-pk7xk-hln0x]
Jun 13, 2017 4:43:37 PM FINEST org.csanchez.jenkins.plugins.kubernetes.pipeline.ContainerExecDecorator
Executing command: "ps" "-o" "pid=" "9999"
printf "EXITCODE %3d" $?; exit

Jun 13, 2017 4:43:37 PM FINEST org.csanchez.jenkins.plugins.kubernetes.pipeline.ContainerExecProc
Waiting for websocket to close on command finish (java.util.concurrent.CountDownLatch@5e49b079[Count = 0])
Jun 13, 2017 4:43:37 PM FINEST org.csanchez.jenkins.plugins.kubernetes.pipeline.ContainerExecDecorator
onClose : java.util.concurrent.CountDownLatch@5e49b079[Count = 0]
Jun 13, 2017 4:43:37 PM FINEST org.csanchez.jenkins.plugins.kubernetes.pipeline.ContainerExecProc
Command is finished (java.util.concurrent.CountDownLatch@5e49b079[Count = 0])
Jun 13, 2017 4:43:37 PM WARNING org.csanchez.jenkins.plugins.kubernetes.pipeline.ContainerExecDecorator$ExitCodeOutputStream getExitCode
Unable to find "EXITCODE" in ODE 1exit

Jun 13, 2017 4:43:37 PM FINEST org.csanchez.jenkins.plugins.kubernetes.pipeline.ContainerExecDecorator
Executing shell script inside container [nomad] of pod [jenkins-slave-pk7xk-hln0x]
Jun 13, 2017 4:43:37 PM FINEST org.csanchez.jenkins.plugins.kubernetes.pipeline.ContainerExecDecorator
Executing command: "ps" "-o" "pid=" "12"
printf "EXITCODE %3d" $?; exit

Jun 13, 2017 4:43:37 PM FINEST org.csanchez.jenkins.plugins.kubernetes.pipeline.ContainerExecProc
Waiting for websocket to close on command finish (java.util.concurrent.CountDownLatch@7067594a[Count = 0])
Jun 13, 2017 4:43:37 PM FINEST org.csanchez.jenkins.plugins.kubernetes.pipeline.ContainerExecDecorator
onClose : java.util.concurrent.CountDownLatch@7067594a[Count = 0]
Jun 13, 2017 4:43:37 PM FINEST org.csanchez.jenkins.plugins.kubernetes.pipeline.ContainerExecProc
Command is finished (java.util.concurrent.CountDownLatch@7067594a[Count = 0])
Jun 13, 2017 4:43:37 PM WARNING org.csanchez.jenkins.plugins.kubernetes.pipeline.ContainerExecDecorator$ExitCodeOutputStream getExitCode
Unable to find "EXITCODE" in ODE 0exit

Jun 13, 2017 4:43:37 PM FINEST org.csanchez.jenkins.plugins.kubernetes.pipeline.ContainerExecDecorator
Executing shell script inside container [nomad] of pod [jenkins-slave-pk7xk-hln0x]
Jun 13, 2017 4:43:37 PM FINEST org.csanchez.jenkins.plugins.kubernetes.pipeline.ContainerExecDecorator
Executing command: "nohup" "sh" "-c" "echo $$ > '/home/jenkins/workspace/nomad_test@tmp/durable-95ef8e82/pid'; jsc=durable-bc5c048a87ac48cd0600fa956ee62c00; JENKINS_SERVER_COOKIE=$jsc '/home/jenkins/workspace/nomad_test@tmp/durable-95ef8e82/script.sh' > '/home/jenkins/workspace/nomad_test@tmp/durable-95ef8e82/jenkins-log.txt' 2>&1; echo $? > '/home/jenkins/workspace/nomad_test@tmp/durable-95ef8e82/jenkins-result.txt'"
printf "EXITCODE %3d" $?; exit

Jun 13, 2017 4:43:37 PM FINEST org.csanchez.jenkins.plugins.kubernetes.pipeline.ContainerExecDecorator
onClose : java.util.concurrent.CountDownLatch@466cea84[Count = 0]
Jun 13, 2017 4:43:41 PM FINEST org.csanchez.jenkins.plugins.kubernetes.pipeline.ContainerExecDecorator
onClose : java.util.concurrent.CountDownLatch@3a18410f[Count = 0]

My pipeline is very simple, i only pulled out the build part, the scm is working fine.

stage('build') {
    podTemplate(label: "mobile", inheritFrom: "base",
            containers: [
                containerTemplate(name: 'mobile', image: "<my registry>/mobile-builder:latest", ttyEnabled: true, command: 'cat', args: '')
            ]) {
        node("mobile") {
            container('mobile') {
                dir('sources') {
                    unstash "mobile-sources"
                    sh """
                    tar -xzf mobile.tgz -C ../
                    """
                    // it never gets to here, the tar is abruptly ended, but if i comment out the tar it works just fine.
                    deleteDir()
                }

                sh """
                /build.sh -b v5_0 -n ${env.BUILD_NUMBER} -s qa -r ./mobile
                cd mobile; tar czf ../mobile.tar.gz mobile
                """

                stash includes: "mobile.tar.gz", name: 'mobile'
            }
        }
    }
}

jwhitcraft commented Jun 13, 2017

@carlossg and @iocanel

I just tried this on my test server I and i'm seeing this warning popup more that i think it should be.

Jun 13, 2017 4:11:53 PM WARNING org.csanchez.jenkins.plugins.kubernetes.pipeline.ContainerExecDecorator$ExitCodeOutputStream getExitCode
Unable to find "EXITCODE" in ODE   1exit

Edit here is the full log from all the org.csanchez.jenkins.plugins.kubernetes.pipeline.* Classes

Jun 13, 2017 4:43:26 PM FINE org.csanchez.jenkins.plugins.kubernetes.pipeline.ContainerStepExecution Starting container step. Jun 13, 2017 4:43:37 PM FINEST org.csanchez.jenkins.plugins.kubernetes.pipeline.ContainerExecDecorator Executing shell script inside container [nomad] of pod [jenkins-slave-pk7xk-hln0x] Jun 13, 2017 4:43:37 PM FINEST org.csanchez.jenkins.plugins.kubernetes.pipeline.ContainerExecDecorator Executing command: "nohup" "sh" "-c" "echo \$\$ > '/home/jenkins/workspace/nomad_test/sources@tmp/durable-0cf6fafa/pid'; jsc=durable-8933846f6b831b7e2e6e882ff1d98d5c; JENKINS_SERVER_COOKIE=\$jsc '/home/jenkins/workspace/nomad_test/sources@tmp/durable-0cf6fafa/script.sh' > '/home/jenkins/workspace/nomad_test/sources@tmp/durable-0cf6fafa/jenkins-log.txt' 2>&1; echo \$? > '/home/jenkins/workspace/nomad_test/sources@tmp/durable-0cf6fafa/jenkins-result.txt'" printf "EXITCODE %3d" $?; exit

Jun 13, 2017 4:43:37 PM FINEST org.csanchez.jenkins.plugins.kubernetes.pipeline.ContainerExecDecorator
Executing shell script inside container [nomad] of pod [jenkins-slave-pk7xk-hln0x]
Jun 13, 2017 4:43:37 PM FINEST org.csanchez.jenkins.plugins.kubernetes.pipeline.ContainerExecDecorator
Executing command: "ps" "-o" "pid=" "9999"
printf "EXITCODE %3d" $?; exit

Jun 13, 2017 4:43:37 PM FINEST org.csanchez.jenkins.plugins.kubernetes.pipeline.ContainerExecProc
Waiting for websocket to close on command finish (java.util.concurrent.CountDownLatch@5e49b079[Count = 0])
Jun 13, 2017 4:43:37 PM FINEST org.csanchez.jenkins.plugins.kubernetes.pipeline.ContainerExecDecorator
onClose : java.util.concurrent.CountDownLatch@5e49b079[Count = 0]
Jun 13, 2017 4:43:37 PM FINEST org.csanchez.jenkins.plugins.kubernetes.pipeline.ContainerExecProc
Command is finished (java.util.concurrent.CountDownLatch@5e49b079[Count = 0])
Jun 13, 2017 4:43:37 PM WARNING org.csanchez.jenkins.plugins.kubernetes.pipeline.ContainerExecDecorator$ExitCodeOutputStream getExitCode
Unable to find "EXITCODE" in ODE 1exit

Jun 13, 2017 4:43:37 PM FINEST org.csanchez.jenkins.plugins.kubernetes.pipeline.ContainerExecDecorator
Executing shell script inside container [nomad] of pod [jenkins-slave-pk7xk-hln0x]
Jun 13, 2017 4:43:37 PM FINEST org.csanchez.jenkins.plugins.kubernetes.pipeline.ContainerExecDecorator
Executing command: "ps" "-o" "pid=" "12"
printf "EXITCODE %3d" $?; exit

Jun 13, 2017 4:43:37 PM FINEST org.csanchez.jenkins.plugins.kubernetes.pipeline.ContainerExecProc
Waiting for websocket to close on command finish (java.util.concurrent.CountDownLatch@7067594a[Count = 0])
Jun 13, 2017 4:43:37 PM FINEST org.csanchez.jenkins.plugins.kubernetes.pipeline.ContainerExecDecorator
onClose : java.util.concurrent.CountDownLatch@7067594a[Count = 0]
Jun 13, 2017 4:43:37 PM FINEST org.csanchez.jenkins.plugins.kubernetes.pipeline.ContainerExecProc
Command is finished (java.util.concurrent.CountDownLatch@7067594a[Count = 0])
Jun 13, 2017 4:43:37 PM WARNING org.csanchez.jenkins.plugins.kubernetes.pipeline.ContainerExecDecorator$ExitCodeOutputStream getExitCode
Unable to find "EXITCODE" in ODE 0exit

Jun 13, 2017 4:43:37 PM FINEST org.csanchez.jenkins.plugins.kubernetes.pipeline.ContainerExecDecorator
Executing shell script inside container [nomad] of pod [jenkins-slave-pk7xk-hln0x]
Jun 13, 2017 4:43:37 PM FINEST org.csanchez.jenkins.plugins.kubernetes.pipeline.ContainerExecDecorator
Executing command: "nohup" "sh" "-c" "echo $$ > '/home/jenkins/workspace/nomad_test@tmp/durable-95ef8e82/pid'; jsc=durable-bc5c048a87ac48cd0600fa956ee62c00; JENKINS_SERVER_COOKIE=$jsc '/home/jenkins/workspace/nomad_test@tmp/durable-95ef8e82/script.sh' > '/home/jenkins/workspace/nomad_test@tmp/durable-95ef8e82/jenkins-log.txt' 2>&1; echo $? > '/home/jenkins/workspace/nomad_test@tmp/durable-95ef8e82/jenkins-result.txt'"
printf "EXITCODE %3d" $?; exit

Jun 13, 2017 4:43:37 PM FINEST org.csanchez.jenkins.plugins.kubernetes.pipeline.ContainerExecDecorator
onClose : java.util.concurrent.CountDownLatch@466cea84[Count = 0]
Jun 13, 2017 4:43:41 PM FINEST org.csanchez.jenkins.plugins.kubernetes.pipeline.ContainerExecDecorator
onClose : java.util.concurrent.CountDownLatch@3a18410f[Count = 0]

My pipeline is very simple, i only pulled out the build part, the scm is working fine.

stage('build') {
    podTemplate(label: "mobile", inheritFrom: "base",
            containers: [
                containerTemplate(name: 'mobile', image: "<my registry>/mobile-builder:latest", ttyEnabled: true, command: 'cat', args: '')
            ]) {
        node("mobile") {
            container('mobile') {
                dir('sources') {
                    unstash "mobile-sources"
                    sh """
                    tar -xzf mobile.tgz -C ../
                    """
                    // it never gets to here, the tar is abruptly ended, but if i comment out the tar it works just fine.
                    deleteDir()
                }

                sh """
                /build.sh -b v5_0 -n ${env.BUILD_NUMBER} -s qa -r ./mobile
                cd mobile; tar czf ../mobile.tar.gz mobile
                """

                stash includes: "mobile.tar.gz", name: 'mobile'
            }
        }
    }
}
@coreypobrien

This comment has been minimized.

Show comment
Hide comment
@coreypobrien

coreypobrien Jun 22, 2017

I started running this code to avoid https://issues.jenkins-ci.org/browse/JENKINS-40825. It's definitely improved, but today I ran into the Pipe not connected error when running a few parallel builds, so I'm not sure if it is entirely fixed.

Here's a sample stack:

java.io.IOException: Pipe not connected
	at java.io.PipedOutputStream.write(PipedOutputStream.java:140)
	at java.io.OutputStream.write(OutputStream.java:75)
	at org.csanchez.jenkins.plugins.kubernetes.pipeline.ContainerExecDecorator$1.launch(ContainerExecDecorator.java:176)
	at hudson.Launcher$ProcStarter.start(Launcher.java:384)
	at org.jenkinsci.plugins.durabletask.BourneShellScript.launchWithCookie(BourneShellScript.java:157)
	at org.jenkinsci.plugins.durabletask.FileMonitoringTask.launch(FileMonitoringTask.java:64)
	at org.jenkinsci.plugins.workflow.steps.durable_task.DurableTaskStep$Execution.start(DurableTaskStep.java:167)
	at org.jenkinsci.plugins.workflow.cps.DSL.invokeStep(DSL.java:224)
	at org.jenkinsci.plugins.workflow.cps.DSL.invokeMethod(DSL.java:150)
	at org.jenkinsci.plugins.workflow.cps.CpsScript.invokeMethod(CpsScript.java:108)
	at sun.reflect.GeneratedMethodAccessor210.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 groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1215)
	at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1024)
	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.AbstractCallSite.call(AbstractCallSite.java:113)
	at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:151)
	at org.kohsuke.groovy.sandbox.GroovyInterceptor.onMethodCall(GroovyInterceptor.java:21)
	at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:115)
	at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:149)
	at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:146)
	at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:123)
	at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:123)
	at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:123)
	at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:123)
	at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:123)
	at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.methodCall(SandboxInvoker.java:16)
	at WorkflowScript.run(WorkflowScript:41)
	at ___cps.transform___(Native Method)
	at com.cloudbees.groovy.cps.impl.ContinuationGroup.methodCall(ContinuationGroup.java:57)
	at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.dispatchOrArg(FunctionCallBlock.java:109)
	at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.fixArg(FunctionCallBlock.java:82)
	at sun.reflect.GeneratedMethodAccessor195.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.cloudbees.groovy.cps.impl.ContinuationPtr$ContinuationImpl.receive(ContinuationPtr.java:72)
	at com.cloudbees.groovy.cps.impl.ConstantBlock.eval(ConstantBlock.java:21)
	at com.cloudbees.groovy.cps.Next.step(Next.java:83)
	at com.cloudbees.groovy.cps.Continuable$1.call(Continuable.java:173)
	at com.cloudbees.groovy.cps.Continuable$1.call(Continuable.java:162)
	at org.codehaus.groovy.runtime.GroovyCategorySupport$ThreadCategoryInfo.use(GroovyCategorySupport.java:122)
	at org.codehaus.groovy.runtime.GroovyCategorySupport.use(GroovyCategorySupport.java:261)
	at com.cloudbees.groovy.cps.Continuable.run0(Continuable.java:162)
	at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.access$001(SandboxContinuable.java:19)
	at org.jenkinsci.plugins.workflow.cps.SandboxContinuable$1.call(SandboxContinuable.java:35)
	at org.jenkinsci.plugins.workflow.cps.SandboxContinuable$1.call(SandboxContinuable.java:32)
	at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.GroovySandbox.runInSandbox(GroovySandbox.java:108)
	at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.run0(SandboxContinuable.java:32)
	at org.jenkinsci.plugins.workflow.cps.CpsThread.runNextChunk(CpsThread.java:174)
	at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.run(CpsThreadGroup.java:330)
	at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.access$100(CpsThreadGroup.java:82)
	at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:242)
	at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:230)
	at org.jenkinsci.plugins.workflow.cps.CpsVmExecutorService$2.call(CpsVmExecutorService.java:64)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at hudson.remoting.SingleLaneExecutorService$1.run(SingleLaneExecutorService.java:112)
	at jenkins.util.ContextResettingExecutorService$1.run(ContextResettingExecutorService.java:28)
	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:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:748)

I started running this code to avoid https://issues.jenkins-ci.org/browse/JENKINS-40825. It's definitely improved, but today I ran into the Pipe not connected error when running a few parallel builds, so I'm not sure if it is entirely fixed.

Here's a sample stack:

java.io.IOException: Pipe not connected
	at java.io.PipedOutputStream.write(PipedOutputStream.java:140)
	at java.io.OutputStream.write(OutputStream.java:75)
	at org.csanchez.jenkins.plugins.kubernetes.pipeline.ContainerExecDecorator$1.launch(ContainerExecDecorator.java:176)
	at hudson.Launcher$ProcStarter.start(Launcher.java:384)
	at org.jenkinsci.plugins.durabletask.BourneShellScript.launchWithCookie(BourneShellScript.java:157)
	at org.jenkinsci.plugins.durabletask.FileMonitoringTask.launch(FileMonitoringTask.java:64)
	at org.jenkinsci.plugins.workflow.steps.durable_task.DurableTaskStep$Execution.start(DurableTaskStep.java:167)
	at org.jenkinsci.plugins.workflow.cps.DSL.invokeStep(DSL.java:224)
	at org.jenkinsci.plugins.workflow.cps.DSL.invokeMethod(DSL.java:150)
	at org.jenkinsci.plugins.workflow.cps.CpsScript.invokeMethod(CpsScript.java:108)
	at sun.reflect.GeneratedMethodAccessor210.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 groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1215)
	at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1024)
	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.AbstractCallSite.call(AbstractCallSite.java:113)
	at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:151)
	at org.kohsuke.groovy.sandbox.GroovyInterceptor.onMethodCall(GroovyInterceptor.java:21)
	at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:115)
	at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:149)
	at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:146)
	at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:123)
	at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:123)
	at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:123)
	at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:123)
	at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:123)
	at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.methodCall(SandboxInvoker.java:16)
	at WorkflowScript.run(WorkflowScript:41)
	at ___cps.transform___(Native Method)
	at com.cloudbees.groovy.cps.impl.ContinuationGroup.methodCall(ContinuationGroup.java:57)
	at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.dispatchOrArg(FunctionCallBlock.java:109)
	at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.fixArg(FunctionCallBlock.java:82)
	at sun.reflect.GeneratedMethodAccessor195.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.cloudbees.groovy.cps.impl.ContinuationPtr$ContinuationImpl.receive(ContinuationPtr.java:72)
	at com.cloudbees.groovy.cps.impl.ConstantBlock.eval(ConstantBlock.java:21)
	at com.cloudbees.groovy.cps.Next.step(Next.java:83)
	at com.cloudbees.groovy.cps.Continuable$1.call(Continuable.java:173)
	at com.cloudbees.groovy.cps.Continuable$1.call(Continuable.java:162)
	at org.codehaus.groovy.runtime.GroovyCategorySupport$ThreadCategoryInfo.use(GroovyCategorySupport.java:122)
	at org.codehaus.groovy.runtime.GroovyCategorySupport.use(GroovyCategorySupport.java:261)
	at com.cloudbees.groovy.cps.Continuable.run0(Continuable.java:162)
	at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.access$001(SandboxContinuable.java:19)
	at org.jenkinsci.plugins.workflow.cps.SandboxContinuable$1.call(SandboxContinuable.java:35)
	at org.jenkinsci.plugins.workflow.cps.SandboxContinuable$1.call(SandboxContinuable.java:32)
	at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.GroovySandbox.runInSandbox(GroovySandbox.java:108)
	at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.run0(SandboxContinuable.java:32)
	at org.jenkinsci.plugins.workflow.cps.CpsThread.runNextChunk(CpsThread.java:174)
	at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.run(CpsThreadGroup.java:330)
	at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.access$100(CpsThreadGroup.java:82)
	at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:242)
	at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:230)
	at org.jenkinsci.plugins.workflow.cps.CpsVmExecutorService$2.call(CpsVmExecutorService.java:64)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at hudson.remoting.SingleLaneExecutorService$1.run(SingleLaneExecutorService.java:112)
	at jenkins.util.ContextResettingExecutorService$1.run(ContextResettingExecutorService.java:28)
	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:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:748)
@spunkedy

This comment has been minimized.

Show comment
Hide comment
@spunkedy

spunkedy Jul 12, 2017

Any idea when this will get merged in and released?

Any idea when this will get merged in and released?

@carlossg carlossg merged commit 5c87246 into master Jul 12, 2017

@carlossg carlossg deleted the JENKINS-42048-pid branch Jul 12, 2017

@laurentverbruggen

This comment has been minimized.

Show comment
Hide comment
@laurentverbruggen

laurentverbruggen Jul 13, 2017

@carlossg any idea when a new version containing this pull request will be released?

@carlossg any idea when a new version containing this pull request will be released?

@brianwallace

This comment has been minimized.

Show comment
Hide comment
@brianwallace

brianwallace Jul 19, 2017

I rebuilt the kubernetes-plugin from SHA 050e559 and continue to see the Pipe Not Connected error. Stack trace is below. We are running Jenkins 2.46.2-alpine.

It definitely seems that the rate of occurrence is related to the concurrency -- i.e. the larger number of ongoing builds and the more container ongoing containers seems to increase the likelihood of seeing this error. We use the pipeline plugin with many parallelized builds so we often have many containerized builds ongoing at once -- I believe that is part of the reason we see this error so frequently.

java.io.IOException: Pipe not connected
	at java.io.PipedOutputStream.write(PipedOutputStream.java:140)
	at java.io.OutputStream.write(OutputStream.java:75)
	at org.csanchez.jenkins.plugins.kubernetes.pipeline.ContainerExecDecorator$1.launch(ContainerExecDecorator.java:176)
	at hudson.Launcher$ProcStarter.start(Launcher.java:384)
	at org.jenkinsci.plugins.durabletask.BourneShellScript.launchWithCookie(BourneShellScript.java:157)
	at org.jenkinsci.plugins.durabletask.FileMonitoringTask.launch(FileMonitoringTask.java:64)
	at org.jenkinsci.plugins.workflow.steps.durable_task.DurableTaskStep$Execution.start(DurableTaskStep.java:167)
	at org.jenkinsci.plugins.workflow.cps.DSL.invokeStep(DSL.java:224)
	at org.jenkinsci.plugins.workflow.cps.DSL.invokeMethod(DSL.java:150)
	at org.jenkinsci.plugins.workflow.cps.CpsScript.invokeMethod(CpsScript.java:108)
	at sun.reflect.GeneratedMethodAccessor346.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 groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1215)
	at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1024)
	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.AbstractCallSite.call(AbstractCallSite.java:113)
	at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:151)
	at org.kohsuke.groovy.sandbox.GroovyInterceptor.onMethodCall(GroovyInterceptor.java:21)
	at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:115)
	at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:149)
	at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:146)
	at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:123)
	at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:123)
	at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:123)
	at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:123)
	at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:123)
	at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:123)
	at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.methodCall(SandboxInvoker.java:16)
	at WorkflowScript.run(WorkflowScript:336)
	at ___cps.transform___(Native Method)
	at com.cloudbees.groovy.cps.impl.ContinuationGroup.methodCall(ContinuationGroup.java:57)
	at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.dispatchOrArg(FunctionCallBlock.java:109)
	at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.fixArg(FunctionCallBlock.java:82)
	at sun.reflect.GeneratedMethodAccessor341.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.cloudbees.groovy.cps.impl.ContinuationPtr$ContinuationImpl.receive(ContinuationPtr.java:72)
	at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.dispatchOrArg(FunctionCallBlock.java:103)
	at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.fixArg(FunctionCallBlock.java:82)
	at sun.reflect.GeneratedMethodAccessor341.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.cloudbees.groovy.cps.impl.ContinuationPtr$ContinuationImpl.receive(ContinuationPtr.java:72)
	at com.cloudbees.groovy.cps.impl.ContinuationGroup.methodCall(ContinuationGroup.java:60)
	at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.dispatchOrArg(FunctionCallBlock.java:109)
	at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.fixArg(FunctionCallBlock.java:82)
	at sun.reflect.GeneratedMethodAccessor341.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.cloudbees.groovy.cps.impl.ContinuationPtr$ContinuationImpl.receive(ContinuationPtr.java:72)
	at com.cloudbees.groovy.cps.impl.ConstantBlock.eval(ConstantBlock.java:21)
	at com.cloudbees.groovy.cps.Next.step(Next.java:83)
	at com.cloudbees.groovy.cps.Continuable$1.call(Continuable.java:173)
	at com.cloudbees.groovy.cps.Continuable$1.call(Continuable.java:162)
	at org.codehaus.groovy.runtime.GroovyCategorySupport$ThreadCategoryInfo.use(GroovyCategorySupport.java:122)
	at org.codehaus.groovy.runtime.GroovyCategorySupport.use(GroovyCategorySupport.java:261)
	at com.cloudbees.groovy.cps.Continuable.run0(Continuable.java:162)
	at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.access$001(SandboxContinuable.java:19)
	at org.jenkinsci.plugins.workflow.cps.SandboxContinuable$1.call(SandboxContinuable.java:35)
	at org.jenkinsci.plugins.workflow.cps.SandboxContinuable$1.call(SandboxContinuable.java:32)
	at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.GroovySandbox.runInSandbox(GroovySandbox.java:108)
	at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.run0(SandboxContinuable.java:32)
	at org.jenkinsci.plugins.workflow.cps.CpsThread.runNextChunk(CpsThread.java:174)
	at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.run(CpsThreadGroup.java:330)
	at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.access$100(CpsThreadGroup.java:82)
	at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:242)
	at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:230)
	at org.jenkinsci.plugins.workflow.cps.CpsVmExecutorService$2.call(CpsVmExecutorService.java:64)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at hudson.remoting.SingleLaneExecutorService$1.run(SingleLaneExecutorService.java:112)
	at jenkins.util.ContextResettingExecutorService$1.run(ContextResettingExecutorService.java:28)
	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:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:745)

I rebuilt the kubernetes-plugin from SHA 050e559 and continue to see the Pipe Not Connected error. Stack trace is below. We are running Jenkins 2.46.2-alpine.

It definitely seems that the rate of occurrence is related to the concurrency -- i.e. the larger number of ongoing builds and the more container ongoing containers seems to increase the likelihood of seeing this error. We use the pipeline plugin with many parallelized builds so we often have many containerized builds ongoing at once -- I believe that is part of the reason we see this error so frequently.

java.io.IOException: Pipe not connected
	at java.io.PipedOutputStream.write(PipedOutputStream.java:140)
	at java.io.OutputStream.write(OutputStream.java:75)
	at org.csanchez.jenkins.plugins.kubernetes.pipeline.ContainerExecDecorator$1.launch(ContainerExecDecorator.java:176)
	at hudson.Launcher$ProcStarter.start(Launcher.java:384)
	at org.jenkinsci.plugins.durabletask.BourneShellScript.launchWithCookie(BourneShellScript.java:157)
	at org.jenkinsci.plugins.durabletask.FileMonitoringTask.launch(FileMonitoringTask.java:64)
	at org.jenkinsci.plugins.workflow.steps.durable_task.DurableTaskStep$Execution.start(DurableTaskStep.java:167)
	at org.jenkinsci.plugins.workflow.cps.DSL.invokeStep(DSL.java:224)
	at org.jenkinsci.plugins.workflow.cps.DSL.invokeMethod(DSL.java:150)
	at org.jenkinsci.plugins.workflow.cps.CpsScript.invokeMethod(CpsScript.java:108)
	at sun.reflect.GeneratedMethodAccessor346.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 groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1215)
	at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1024)
	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.AbstractCallSite.call(AbstractCallSite.java:113)
	at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:151)
	at org.kohsuke.groovy.sandbox.GroovyInterceptor.onMethodCall(GroovyInterceptor.java:21)
	at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:115)
	at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:149)
	at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:146)
	at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:123)
	at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:123)
	at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:123)
	at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:123)
	at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:123)
	at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:123)
	at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.methodCall(SandboxInvoker.java:16)
	at WorkflowScript.run(WorkflowScript:336)
	at ___cps.transform___(Native Method)
	at com.cloudbees.groovy.cps.impl.ContinuationGroup.methodCall(ContinuationGroup.java:57)
	at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.dispatchOrArg(FunctionCallBlock.java:109)
	at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.fixArg(FunctionCallBlock.java:82)
	at sun.reflect.GeneratedMethodAccessor341.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.cloudbees.groovy.cps.impl.ContinuationPtr$ContinuationImpl.receive(ContinuationPtr.java:72)
	at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.dispatchOrArg(FunctionCallBlock.java:103)
	at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.fixArg(FunctionCallBlock.java:82)
	at sun.reflect.GeneratedMethodAccessor341.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.cloudbees.groovy.cps.impl.ContinuationPtr$ContinuationImpl.receive(ContinuationPtr.java:72)
	at com.cloudbees.groovy.cps.impl.ContinuationGroup.methodCall(ContinuationGroup.java:60)
	at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.dispatchOrArg(FunctionCallBlock.java:109)
	at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.fixArg(FunctionCallBlock.java:82)
	at sun.reflect.GeneratedMethodAccessor341.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.cloudbees.groovy.cps.impl.ContinuationPtr$ContinuationImpl.receive(ContinuationPtr.java:72)
	at com.cloudbees.groovy.cps.impl.ConstantBlock.eval(ConstantBlock.java:21)
	at com.cloudbees.groovy.cps.Next.step(Next.java:83)
	at com.cloudbees.groovy.cps.Continuable$1.call(Continuable.java:173)
	at com.cloudbees.groovy.cps.Continuable$1.call(Continuable.java:162)
	at org.codehaus.groovy.runtime.GroovyCategorySupport$ThreadCategoryInfo.use(GroovyCategorySupport.java:122)
	at org.codehaus.groovy.runtime.GroovyCategorySupport.use(GroovyCategorySupport.java:261)
	at com.cloudbees.groovy.cps.Continuable.run0(Continuable.java:162)
	at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.access$001(SandboxContinuable.java:19)
	at org.jenkinsci.plugins.workflow.cps.SandboxContinuable$1.call(SandboxContinuable.java:35)
	at org.jenkinsci.plugins.workflow.cps.SandboxContinuable$1.call(SandboxContinuable.java:32)
	at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.GroovySandbox.runInSandbox(GroovySandbox.java:108)
	at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.run0(SandboxContinuable.java:32)
	at org.jenkinsci.plugins.workflow.cps.CpsThread.runNextChunk(CpsThread.java:174)
	at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.run(CpsThreadGroup.java:330)
	at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.access$100(CpsThreadGroup.java:82)
	at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:242)
	at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:230)
	at org.jenkinsci.plugins.workflow.cps.CpsVmExecutorService$2.call(CpsVmExecutorService.java:64)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at hudson.remoting.SingleLaneExecutorService$1.run(SingleLaneExecutorService.java:112)
	at jenkins.util.ContextResettingExecutorService$1.run(ContextResettingExecutorService.java:28)
	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:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:745)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment