【问题标题】:How to delete a build from Jenkins job workspace如何从 Jenkins 作业工作区中删除构建
【发布时间】:2017-08-28 18:59:47
【问题描述】:

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

我尝试在构建历史中“删除构建”,但它所做的只是从构建历史表中删除构建引用。我知道我可以 ssh 到服务器并从命令行删除文件,但我正在寻找一种从 Jenkins Web 界面执行此操作的方法。

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

【问题讨论】:

  • "Delete Build" 不仅仅是删除一个引用。您没有看到哪些文件被清理?
  • 如果您已将 Jenkins 配置为归档构建的 artifacts,则 Jenkins 将在删除构建时删除这些工件,但 Jenkins 不会将工件存储在作业的工作区。您的工作负责管理工作区。听起来您需要配置 Jenkins 以存档适当的工件并停止使用作业的工作区进行存储。
  • @BMitch 在运行作业时,我的脚本会从网络位置下载一些位图并将它们保存在作业工作区 (JOB_NAME/ws/BUILD_NO/) 中。构建完成后,我想保留这些文件,因为其他团队可能需要它们进行进一步分析。稍后当我用完空间时,我需要删除一些构建,但不需要删除最旧的构建。当我从 Build History 表中删除它们时,位图仍然占用磁盘空间。
  • @DaveBacher 感谢您指出这一点。问题是工件存储在主节点上,而我在从节点上运行我的作业并且更喜欢将我的大部分文件保留在本地工作区中。

标签: jenkins jenkins-plugins


【解决方案1】:

在您的 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 将是“my-job-name”,$BUILD_NUMBER 是内部版本号,例如。 “123”。

这种方法存在一个令人讨厌的问题,这就是我不建议使用它的原因 - Jenkins 将无法为过时的构建回收磁盘空间。您必须手动清理过时的构建,这很麻烦。

为您提供更多控制权、工具并能够控制磁盘空间使用(无需您监督)的替代方法是使用默认工作区设置并存档您的构建输出(文件、原始源代码、库等)。 ) 作为构建后的操作。非常方便,让您可以访问一大堆很棒的工具,例如 Copy Artifact PluginArtifactDeployer Plugin 在其他工作中。

希望这些信息可以帮助您做出最适合您需求的决定。

【讨论】:

    【解决方案2】:

    我还在 Windows 机器上使用“常规/高级/使用自定义工作区”(如 @pabloduo 的回答),例如:

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

    只是想添加一个解决方案来摆脱构建作业的工作区。

    我为此使用Groovy Events Listener Plugin

    使用插件的标准配置我只使用以下 Groovy 脚本:

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

    现在自定义工作区会在构建作业被删除时被删除。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-27
      • 1970-01-01
      • 1970-01-01
      • 2017-02-09
      • 1970-01-01
      • 2010-10-27
      相关资源
      最近更新 更多