清理Jenkins工作区的好策略是什么?在一个大型团队开始使用Jenkins之后,可用的工作空间正在缩小,即使通过工作/管道似乎也在尽职尽责地进行清理。
我正在尝试的当前方法:遍历每个节点(包括主节点), 在$ WORKSPACE下,查找和删除给定年龄的目录。这看起来安全吗?
我尝试通过Jenkins控制台运行在线groovy代码片段,并且那些被拒绝但有错误。我宁愿坚持使用已知可行的简单代码。
非常感谢。
答案 0 :(得分:1)
每次运行都有一个清理工作空间的阶段:
node {
try {
stage('Clean Work Space') {
cleanWs()
sh 'pwd'
sh 'ls'
}
}
}
答案 1 :(得分:0)
你可以使用"弃掉旧版本"作业上的选项可限制为每个作业存储的构建数量。这将减少磁盘空间的使用。
答案 2 :(得分:0)
您可以使用deleteDir()命令清理工作区。
答案 3 :(得分:-1)
删除工作区的最佳策略是使用Sprint编号(如果使用敏捷)或修改日期(以保留最新的前5名)。
我已经为上述两种策略创建了一个包含Groovy脚本的脚本。
这是我的详细博客,介绍了删除所有工作和个人工作的Jenkins工作区的策略。
https://medium.com/@vishnuteja/jenkins-cleanup-workspace-reduce-disk-usage-18310097d3ef
以下是按修改日期清理工作区的代码。
import jenkins.*
import jenkins.model.*
import hudson.*
import hudson.model.*
//manager.listener.logger.println new Date(System.currentTimeMillis()).format('MM/dd/yyyy hh:mm:ss a') + " / " + " -- Start Time"
//Get value from String Parameter
MAX_BUILDS = manager.build.buildVariables.get("MAX_BUILDS").toInteger()
for (job in Jenkins.instance.items)
{
int count = 0
manager.listener.logger.println "\n ***Job Name: "+job.name+"***"
if(job.workspace!=null && job.workspace!="") //Check if there is a workspace associated with the Job
{
manager.listener.logger.println "Workspace path : " + job.workspace
String workspace = job.workspace
File folder = new File(workspace)
if(folder!=null && folder.exists()) //Check if the Workspace folder exists
{
// Get all files and folders within the Workspace of current job.
//Iterate through only folders and sort em by Modified Date.
File[] files = new File(workspace).listFiles().sort(){
a,b -> b.lastModified().compareTo a.lastModified()
}
.each{
if(!it.isFile()) //Check only for folders
{
if(count < MAX_BUILDS)
manager.listener.logger.println new Date(it.lastModified()).format('MM/dd/yyyy hh:mm:ss a') + " /" + it.name + " -- Save"
else
{
manager.listener.logger.println new Date(it.lastModified()).format('MM/dd/yyyy hh:mm:ss a') + " /" + it.name + " ** Deleted"
it.deleteDir()
}
count++
}
}
}
else
{
manager.listener.logger.println "Workspace is empty or doesn't exist"
}
}
else
{
manager.listener.logger.println "No Workspace associated with this job"
}
}
}
//manager.listener.logger.println new Date(System.currentTimeMillis()).format('MM/dd/yyyy hh:mm:ss a') + " / " + " -- End Time"