2017-04-06 581 views
1

我想知道是否可以从作业工作区删除一个构建(包括工件)。如何从Jenkins作业工作区删除构建

我试图在构建历史中“删除构建”,但它所做的只是从构建历史记录表中删除构建引用。我知道我可以ssh到服务器,并从命令行删除文件,但我正在寻找一种方法,从詹金斯的网页界面。

安装Workspace Cleanup Plugin后,我可以清除当前工作区,但我想让其他构建保留在工作区中。

+0

“删除构建”不仅仅是删除引用。什么文件你没有看到得到清理? – BMitch

+0

如果您已经配置Jenkins来存档构建的* artifacts *,那么Jenkins将在删除构建时删除这些构件,但Jenkins不会将构件存储在作业的工作区中。您的工作负责管理工作区。听起来您需要配置Jenkins以归档相应的工件并停止使用作业的工作空间进行存储。 –

+0

@BMitch当运行作业时,我的脚本从网络位置下载一些位图并将它们保存在作业工作区(JOB_NAME/ws/BUILD_NO /)中。构建完成后,我想保留这些文件,因为其他团队可能需要它们进行进一步分析。后来,当我用完空间时,我需要删除一些构建,但不需要最老的构建。当我从Build History表中删除它们时,位图仍然占用磁盘空间。 –

回答

4

在您的Jenkins实例中,为了能够在作业设置中拥有文件夹/每个构建 - 设置标志“使用自定义工作区”。下面是从设置描述的一个简短的帮助信息:

For each job on Jenkins, Jenkins allocates a unique "workspace directory." 
This is the directory where the code is checked out and builds happen. 
Normally you should let Jenkins allocate and clean up workspace directories, 
but in several situations this is problematic, and in such case, this option 
lets you specify the workspace location manually. 
One such situation is where paths are hard-coded and the code needs to be 
built on a specific location. While there's no doubt that such a build is 
not ideal, this option allows you to get going in such a situation. 

... 

以及自定义目录路径应该是这样的:

workspace\$JOB_NAME\$BUILD_NUMBER ~> workspace\my-job-name\123 

其中$ JOB_NAME将“我的岗位名称”和$ BUILD_NUMBER是内部编号,eq。 “123”。

这种方法存在一个令人讨厌的问题,这就是为什么我不会推荐使用它 - Jenkins将无法回收用于过时构建的磁盘空间。你将不得不手动清理过时的构建,这是一个很大的麻烦。

另一种方法,即为您提供更多控制,工具,并能够控制磁盘空间使用(无需您的监督),即使用默认工作区设置并存档构建输出(文件,原始源代码,库等) )作为后期制作行动。非常非常方便,您可以访问大量优秀工具,如Copy Artifact PluginArtifactDeployer Plugin在其他工作中。

希望信息能帮助您做出最适合您需求的决定。

0

我也是在Windows机器上使用“普通/高级/使用自定义的工作空间”(如@ pabloduo的回答)的东西,如:

C:\${JOB_NAME}\${BUILD_NUMBER} 

只是想添加一个解决方案,摆脱构建工作的工作空间。

我为此使用Groovy Events Listener Plugin

使用插件的标准配置的话就用下面的Groovy脚本:

if (event == Event.JOB_DELETED){ 
    new File(env.WORKSPACE).deleteDir() 
} 

现在当构建作业被删除自定义的工作空间被删除。

只需注意这也会删除非自定义工作区(因为您的Jenkins服务器上的所有作业都会触发该事件)。

相关问题