-
Bug
-
Resolution: Unresolved
-
Major
-
Kuberetes 1.8
Jenkins 2.107
Kubernetes Plugin: 1.2.1
Java Version: 1.8.0_151
Jenkins Master running in Docker Container in k8s
We are having an issue where we can not create a temp file in a build pipeline within a PodTemplate. Oddly inserting a random 'sh' command before the creation of the temp file solved the problem. Here is the code that fails:
import hudson.FilePath; import jenkins.model.Jenkins; def label = "mynode" podTemplate( label: label, nodeSelector: "kops.k8s.io/instancegroup=jenkins-workers", containers: [containerTemplate(name: 'kubectl', image: 'lachlanevenson/k8s-kubectl:v1.9.3', command: 'cat', ttyEnabled: true)]) { node(label) { container("kubectl") { def workspace = new FilePath(Jenkins.getInstance().getComputer(env.NODE_NAME).getChannel(), env.WORKSPACE); workspace.createTempFile("test", ".txt") sh "ls -al" } } }
The full log is attached, but essentially we get the following exception:
Caused: java.io.IOException: Failed to create a temp file on /home/jenkins/workspace/folder/test-job at hudson.FilePath.createTempFile(FilePath.java:1330)
Oddly, if we add a "sh" command before the creation of the temp file the job succeeds. The following code works:
import hudson.FilePath; import jenkins.model.Jenkins; def label = "mynode" podTemplate( label: label, nodeSelector: "kops.k8s.io/instancegroup=jenkins-workers", containers: [containerTemplate(name: 'kubectl', image: 'lachlanevenson/k8s-kubectl:v1.9.3', command: 'cat', ttyEnabled: true)]) { node(label) { container("kubectl") { sh "ls -al" // This added code somehow makes this pipeline succeed. def workspace = new FilePath(Jenkins.getInstance().getComputer(env.NODE_NAME).getChannel(), env.WORKSPACE); workspace.createTempFile("test", ".txt") sh "ls -al" } } }
It does not seem to matter what the "sh" command before the temp file creation is. We have used "pwd", "echo $HOME", etc. and they all have the same effect of making the pipeline work. Of course both sh "ls -al" commands were put in there as debugging steps, and it just so happened that the first one accidentally made the pipeline work.
[JENKINS-49759] Can't create temp file in Kubernetes Plugin Pipeline
Description |
Original:
We are having an issue where we can not create a temp file in a build pipeline within a PodTemplate. Oddly inserting a random 'sh' command before the creation of the temp file solved the problem. Here is the code that fails: {code:java} import hudson.FilePath; import jenkins.model.Jenkins; def label = "mynode" podTemplate( label: label, nodeSelector: "kops.k8s.io/instancegroup=jenkins-workers", containers: [containerTemplate(name: 'kubectl', image: 'lachlanevenson/k8s-kubectl:v1.9.3', command: 'cat', ttyEnabled: true)]) { node(label) { container("kubectl") { def workspace = new FilePath(Jenkins.getInstance().getComputer(env.NODE_NAME).getChannel(), env.WORKSPACE); workspace.createTempFile("test", ".txt") sh "ls -al" } } } {code} The full log is attached, but essentially we get the following exception: {code:java} Caused: java.io.IOException: Failed to create a temp file on /home/jenkins/workspace/folder/test-job at hudson.FilePath.createTempFile(FilePath.java:1330) {code} Oddly, if we add a "sh" command before the creation of the temp file the job succeeds. The following code works: {code:java} import hudson.FilePath; import jenkins.model.Jenkins; def label = "mynode" podTemplate( label: label, nodeSelector: "kops.k8s.io/instancegroup=jenkins-workers", containers: [containerTemplate(name: 'kubectl', image: 'lachlanevenson/k8s-kubectl:v1.9.3', command: 'cat', ttyEnabled: true)]) { node(label) { container("kubectl") { sh "ls -al" def workspace = new FilePath(Jenkins.getInstance().getComputer(env.NODE_NAME).getChannel(), env.WORKSPACE); workspace.createTempFile("test", ".txt") sh "ls -al" } } } {code} It does not seem to matter what the "sh" command before the temp file creation is. We have used "pwd", "echo $HOME", etc. and they all have the same effect of making the pipeline work. Of course both sh "ls -al" commands were put in there as debugging steps, and it just so happened that the first one accidentally made the pipeline work. |
New:
We are having an issue where we can not create a temp file in a build pipeline within a PodTemplate. Oddly inserting a random 'sh' command before the creation of the temp file solved the problem. Here is the code that fails: {code:java} import hudson.FilePath; import jenkins.model.Jenkins; def label = "mynode" podTemplate( label: label, nodeSelector: "kops.k8s.io/instancegroup=jenkins-workers", containers: [containerTemplate(name: 'kubectl', image: 'lachlanevenson/k8s-kubectl:v1.9.3', command: 'cat', ttyEnabled: true)]) { node(label) { container("kubectl") { def workspace = new FilePath(Jenkins.getInstance().getComputer(env.NODE_NAME).getChannel(), env.WORKSPACE); workspace.createTempFile("test", ".txt") sh "ls -al" } } } {code} The full log is attached, but essentially we get the following exception: {code:java} Caused: java.io.IOException: Failed to create a temp file on /home/jenkins/workspace/folder/test-job at hudson.FilePath.createTempFile(FilePath.java:1330) {code} Oddly, if we add a "sh" command before the creation of the temp file the job succeeds. The following code works: {code:java} import hudson.FilePath; import jenkins.model.Jenkins; def label = "mynode" podTemplate( label: label, nodeSelector: "kops.k8s.io/instancegroup=jenkins-workers", containers: [containerTemplate(name: 'kubectl', image: 'lachlanevenson/k8s-kubectl:v1.9.3', command: 'cat', ttyEnabled: true)]) { node(label) { container("kubectl") { sh "ls -al" // This added code somehow makes this pipeline succeed. def workspace = new FilePath(Jenkins.getInstance().getComputer(env.NODE_NAME).getChannel(), env.WORKSPACE); workspace.createTempFile("test", ".txt") sh "ls -al" } } } {code} It does not seem to matter what the "sh" command before the temp file creation is. We have used "pwd", "echo $HOME", etc. and they all have the same effect of making the pipeline work. Of course both sh "ls -al" commands were put in there as debugging steps, and it just so happened that the first one accidentally made the pipeline work. |
Assignee | Original: Carlos Sanchez [ csanchez ] |