有没有办法清理Jenkins工作区?

时间:2015-02-23 21:35:13

标签: jenkins jenkins-plugins accurev

如何在Jenkins中清理工作区?我使用AccuRev作为版本控制工具。

我在Jenkins中创建了freestyle个项目。

11 个答案:

答案 0 :(得分:74)

有一种方法可以清理Jenkins中的工作区。您可以在构建之前或构建之后清理工作区。

首先,安装Workspace Cleanup Plugin

在构建之前清理工作区: 在构建环境下,选中在构建开始前删除工作区的框。

在构建后清理工作区: 在构建后操作标题下,从添加构建后操作下拉菜单中选择在构建完成时删除工作区

答案 1 :(得分:41)

如果你想手动清理它,对我来说我的jenkins版本(似乎不需要安装额外的插件,但谁知道),左栏上有一个“工作区”链接,点击您的项目,然后在“工作区”,然后在左侧列的下方显示“擦除当前工作区”链接。 screenshot

答案 2 :(得分:25)

除了上述解决方案之外,还有一种“常见”方式 - 直接删除Linux机器中最大的空间使用者。您可以按照以下步骤操作:

  1. 登录Jenkins机器(Putty) enter image description here
  2. cd到Jenkins安装路径
  3.   

    使用ls -lart列出隐藏文件夹,通常是jenkin   安装位于.jenkins /文件夹

    [xxxxx ~]$ ls -lart
    
    drwxrwxr-x 12 xxxx  4096 Feb  8 02:08 .jenkins/
    
    1. 列出文件夹空间
    2.   

      Use df -h以高级别显示磁盘空间

           

      du -sh ./*/列出当前每个子文件夹的总内存   路径。

           

      du -a /etc/ | sort -n -r | head -n 10将列出前10个目录   在/ etc /

      中占用磁盘空间
      1. 删除旧版本或其他大尺寸文件夹
      2.   

        通常./job/文件夹或./workspace/文件夹可能是最大的   夹。请进入并根据需要删除(不要删除整个文件夹)。

             

        rm -rf theFolderToDelete

        enter image description here

答案 3 :(得分:10)

您可以在管理Jenkins 脚本控制台中运行以下脚本,以便一次性删除所有作业的工作区。我们这样做是为了清理文件系统上的空间。

import hudson.model.*
// For each project
for(item in Hudson.instance.items) {
  // check that job is not building
  if(!item.isBuilding()) {
    println("Wiping out workspace of job "+item.name)
    item.doDoWipeOutWorkspace()
  }
  else {
    println("Skipping job "+item.name+", currently building")
  }
}

答案 4 :(得分:6)

Workspace Cleanup Plugin

在Jenkins文件中添加

cleanWs()

这将在构建完成后删除工作区

答案 5 :(得分:2)

重要提示:,只要给定的Jenkins作业当前不在运行,就可以安全地删除该工作区!

注意::我假设您的$JENKINS_HOME设置为默认值:/var/jenkins_home

清理一个工作区

rm -rf /var/jenkins_home/workspaces/<workspace>

清理所有工作区

rm -rf /var/jenkins_home/workspaces/*

清理所有工作区,但有一些例外情况

此人使用grep创建白名单:

ls /var/jenkins_home/workspace \ 
  | grep -v -E '(job-to-skip|another-job-to-skip)$' \
  | xargs -I {} rm -rf /var/jenkins_home/workspace/{}

清理10个最大的工作区

此对象使用du和sort来按最大到最小的顺序列出工作区。然后,它使用head抓住前10个:

du -d 1 /var/jenkins_home/workspace \
  | sort -n -r \
  | head -n 10 \
  | xargs -I {} rm -rf /var/jenkins_home/workspace/{}

答案 6 :(得分:1)

您需要在上述选项出现之前安装此插件

Workspace Cleanup Plugin

此插件将复选框添加到所有作业配置中,以允许您在运行任何步骤(包含源代码管理)之前删除整个工作区

这有助于确保始终从已知点开始,以保​​证您的构建方式

答案 7 :(得分:1)

因此不允许发表评论:

来自Upen的答案很好,但如果你将Jenkins Pipeline Jobs与Freestyle Jobs混合在一起,那就不行了。管道作业上没有DoWipeWorkspace这样的方法。 所以我修改了脚本以跳过这些:

import hudson.model.*
import org.jenkinsci.plugins.workflow.job.WorkflowJob

// For each project
for(item in Hudson.instance.items) {
  // check that job is not building
  if(!item.isBuilding() && !(item instanceof WorkflowJob))
  {
    println("Wiping out workspace of job "+item.name)
    item.doDoWipeOutWorkspace()
  }
  else {
    println("Skipping job "+item.name+", currently building")
  }
}

如果需要,您还可以按作业名称进行过滤: item.getDisplayName().toLowerCase().contains("release")

答案 8 :(得分:1)

有一个选项可以做到。配置->构建后操作
默认情况下,该选项至少在Jenkins 2.236版本中为

答案 9 :(得分:0)

假设问题与清理当前作业的工作区有关,则可以运行:

test -n "$WORKSPACE" && rm -rf $WORKSPACE/*

答案 10 :(得分:0)

如果只想删除一个目录(或文件),则可以使用Groovy和Manage Jenkins→Scripts Console运行一个将其删除的脚本。

例如,您可以使用以下命令查看文件:

dh = new File('./bitnami/jenkins/jenkins_home/workspace/jobname/folder')
dh.eachFile {
  println(it)
}

然后,当您在dh中拥有要删除的文件夹时,只需附加下一个代码即可:

dh.deleteDir()

它将被删除。

注意:示例中显示的路径是针对Bitnami Jenkins安装的,您的路径可能有所不同。