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

Kar*_*hik 82 accurev jenkins jenkins-plugins

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

freestyle在Jenkins 创建了项目.

小智 82

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

首先,安装Workspace Cleanup Plugin.

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

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

  • 为什么Jenkins中有很多插件似乎应该成为核心产品的一部分? (4认同)

rog*_*ack 49

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

  • 不幸的是,我没有看到。确定不是插件吗? (3认同)
  • 嗯,似乎“工作区清理插件”确实是“默认情况下”安装的插件之一。但是,删除它后,我仍然具有该链接,并且它似乎仍然起作用。所以...不确定它来自哪里。V2.121.3 (2认同)
  • 这行得通,但是我不得不两次单击工作区链接:第一个进入“工作区”页面,第二次实际显示“清除当前工作区”链接。我想这是您可以在答案中包含的信息。 (2认同)

小智 28

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

  1. 登录Jenkins机器(Putty) 在此输入图像描述
  2. cd到Jenkins安装路径

使用ls -lart列出隐藏文件夹,通常jenkin安装放在.jenkins /文件夹中

[xxxxx ~]$ ls -lart

drwxrwxr-x 12 xxxx  4096 Feb  8 02:08 .jenkins/
Run Code Online (Sandbox Code Playgroud)
  1. 列出文件夹空间

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

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

du -a /etc/ | sort -n -r | head -n 10 将列出在/ etc /中占用磁盘空间的前10个目录

  1. 删除旧版本或其他大型文件夹

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

rm -rf theFolderToDelete

在此输入图像描述

  • @mjaggard这个问题是由其他人提出的,他没有提到它是否仅适用于Windows.他还询问了如何清理工作区(不限于前端/客户端).我错过了这里明显的一切吗? (9认同)
  • 我完全同意@takias,这似乎是这个问题的有效答案.如果你有足够的许可,这是一个很好的. (3认同)
  • 我想这是我的同事在运行脚本来删除“/jobs/”目录中的任何嵌套文件夹时找到的答案。问题是,如果 Jenkins 中有作业的子文件夹(就像我一样),脚本将删除作业配置,而不是构建文件。它消除了多个作业配置,我们必须从备份中提取来重新创建它们。仅使用 UI/BuildDiscarder 插件和选项来清理主节点。切勿手动删除作业文件夹中的任何内容。 (3认同)
  • 不知道为什么投票。对于Jenkins管理员来说,这听起来不错。不同意“只读”用户。 (2认同)

war*_*esh 16

工作区清理插件

在詹金斯文件中添加

cleanWs()
Run Code Online (Sandbox Code Playgroud)

构建完成后,这将删除工作空间

  • 我真的很感谢这个答案,因为我从其他答案中安装了插件,但这正是它可以用于我的设置的原因。除此之外,在其他答案中,我遵循了指向相同插件的链接,但是在插件着陆页上没有出现“ cleanWs()”作为添加到我的“ Jenkinsfile”中的语法。 (3认同)

Upe*_*pen 13

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

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")
  }
}
Run Code Online (Sandbox Code Playgroud)


She*_*way 6

重要信息:只要给定的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/{}
Run Code Online (Sandbox Code Playgroud)

清理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/{}
Run Code Online (Sandbox Code Playgroud)

  • 这很危险,因为作业可能正在使用这些工作区。 (6认同)

fra*_*ode 6

有一个选项可以做到这一点。配置 -> 构建后操作
该选项至少在 Jenkins 版本 2.236 中默认提供


Pho*_*ixS 5

如果您只想删除一个目录(或文件),您可以使用 Groovy 和 Manage Jenkins \xe2\x86\x92 Scripts Console 运行一个脚本来删除它。

\n\n

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

\n\n
dh = new File('./bitnami/jenkins/jenkins_home/workspace/jobname/folder')\ndh.eachFile {\n  println(it)\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后,当您有要删除的文件夹时dh,您可以简单地附加下一个代码:

\n\n
dh.deleteDir()\n
Run Code Online (Sandbox Code Playgroud)\n\n

并且它将被删除。

\n\n

注意:示例中显示的路径适用于 Bitnami Jenkins 安装,您的路径可能不同。

\n


归档时间:

查看次数:

157039 次

最近记录:

6 年,3 月 前