如何在Jenkins中清理工作区?我使用AccuRev
作为版本控制工具。
我在Jenkins中创建了freestyle
个项目。
答案 0 :(得分:74)
有一种方法可以清理Jenkins中的工作区。您可以在构建之前或构建之后清理工作区。
首先,安装Workspace Cleanup Plugin。
在构建之前清理工作区: 在构建环境下,选中在构建开始前删除工作区的框。
在构建后清理工作区: 在构建后操作标题下,从添加构建后操作下拉菜单中选择在构建完成时删除工作区。
答案 1 :(得分:41)
答案 2 :(得分:25)
除了上述解决方案之外,还有一种“常见”方式 - 直接删除Linux机器中最大的空间使用者。您可以按照以下步骤操作:
答案 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)
答案 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/{}
此对象使用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)
您需要在上述选项出现之前安装此插件
此插件将复选框添加到所有作业配置中,以允许您在运行任何步骤(包含源代码管理)之前删除整个工作区
这有助于确保始终从已知点开始,以保证您的构建方式
答案 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安装的,您的路径可能有所不同。