清洁jenkins工作区

时间:2017-09-26 22:22:09

标签: jenkins

清理Jenkins工作区的好策略是什么?在一个大型团队开始使用Jenkins之后,可用的工作空间正在缩小,即使通过工作/管道似乎也在尽职尽责地进行清理。

我正在尝试的当前方法:遍历每个节点(包括主节点), 在$ WORKSPACE下,查找和删除给定年龄的目录。这看起来安全吗?

我尝试通过Jenkins控制台运行在线groovy代码片段,并且那些被拒绝但有错误。我宁愿坚持使用已知可行的简单代码。

非常感谢。

4 个答案:

答案 0 :(得分:1)

每次运行都有一个清理工作空间的阶段:

node {
   try {
       stage('Clean Work Space') {
           cleanWs()
           sh 'pwd'
           sh 'ls'
       }
   }
}

我也将参考:https://jenkins.io/doc/pipeline/steps/ws-cleanup/

答案 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"