Jenkins工作区中的@tmp文件夹是什么以及如何清理它们

时间:2019-10-28 09:54:21

标签: docker jenkins jenkins-pipeline

我有一个Jenkins管道,用于Docker容器中的PHP项目。这是我的Jenkinsfile:

pipeline {
  agent any
  stages {
    stage('Build') {
      agent any
      steps {
        sh 'docker-compose up -d'
        sh 'docker exec symfony composer install'
      }
    }
    stage('Test') {
      steps {
        sh 'docker exec symfony php ./bin/phpunit --coverage-clover=\'reports/coverage/coverage.xml\' --coverage-html=\'reports/coverage\' --coverage-crap4j=\'reports/crap4j.xml\''
      }
    }
    stage('Coverage') {
      steps {
        step([$class: 'CloverPublisher', cloverReportDir: '/reports/coverage', cloverReportFileName: 'coverage.xml'])
      }
    }
  }  
  post {
    cleanup {
      sh 'docker-compose down -v'
      cleanWs()
    }
  }
}

运行管道之后,var/lib/jenkins/workspace文件夹包含4个文件夹(假设我的项目名称为Foo):

  1. Foo
  2. Foo @ 2
  3. Foo @ 2 @ tmp
  4. Foo @ tmp

这些是什么,我该如何清理它们? cleanWs不会删除除构建后的第一个以外的任何东西。

编辑:这不是this question的重复,因为

a)这个问题不能回答我的问题:这些文件是什么。 b)该问题的答案建议使用deleteDir,在使用Docker容器时为not recommended

2 个答案:

答案 0 :(得分:2)

有一个关于deleteDir()的Jenkins issue已打开,没有删除@ tmp / @ script / @ ...目录。

删除这些内容的解决方法:

post {
  always {
    cleanWs()
    dir("${env.WORKSPACE}@tmp") {
      deleteDir()
    }
    dir("${env.WORKSPACE}@script") {
      deleteDir()
    }
    dir("${env.WORKSPACE}@script@tmp") {
      deleteDir()
    }
  }
}

这个问题上还有一个comment,描述了 @tmp 是什么:

它[@tmp文件夹]包含在处加载的任何库的内容 运行。没有副本,重放就无法可靠地工作。

答案 1 :(得分:2)

Foo @ 2 Foo @ 2 @ tmp 定义了两次代理,因此创建了文件夹。一旦在流水线块的顶层定义了它。一旦进入阶段,就称为构建。 阶段“ build”的工作文件夹是Foo @ 2文件夹。