Can't create temp file in Kubernetes Plugin Pipeline

This issue is archived. You can view it, but you can't modify it. Learn more

XMLWordPrintable

      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.

       

        1. failure.log
          9 kB
          Michael MacFadden

            Assignee:
            Unassigned
            Reporter:
            Michael MacFadden
            Archiver:
            Jenkins Service Account

              Created:
              Updated:
              Archived: