65.9K
CodeProject 正在变化。 阅读更多。
Home

TFS:停止在构建服务器上耗尽磁盘空间

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.86/5 (5投票s)

2013年1月21日

CPOL

3分钟阅读

viewsIcon

42962

downloadIcon

252

一个 TFS 构建模板,在构建完成后清理自身

引言

对 TFS 默认构建模板的一个简单修改,允许构建完成后通过删除其在构建服务器上的构建目录来清理自身。如果您不熟悉自定义 TFS Build 或使用 Windows Workflow,那么这篇文章是一个很好的入门介绍。

背景

对于小型 TFS 设置,我们不太可能用源代码填满构建服务器,以至于耗尽磁盘空间,但在大型企业环境中,这绝对是可能的。

在我目前的团队中,我们有一个构建服务器群,每天运行多达 150 次构建,来自 50 个不同的构建定义,跨越许多团队项目。每个源目录在编译、构建和测试完成后大约为 2GB,这意味着如果我们不小心,我们很容易填满构建服务器的硬盘。

对标准构建模板的这种简单修改允许构建在构建完成后删除其在构建服务器上的源目录、二进制文件和测试目录,并将此功能放在一个开关上,以便您可以控制哪些构建执行此操作,哪些不执行。

完整的示例源代码可用,用 VS 2010 和 TFS 2010 编写,但同样适用于 TFS2012

使用代码 

TFS Build 使用 Windows Workflow 编写,自定义构建过程通常涉及使用 Visual Studio 中的工作流编辑器编辑 .xaml 工作流文件。我们将从 TFS 2010 提供的标准 'DefaultTemplate.xaml' 构建模板开始,然后继续。

步骤 1) 将删除目录任务添加到工作流

TFS 提供了一个现成的 'DeleteDirectory' 活动。只需将其拖放到 'Run On Agent' 部分的末尾,并将要删除的目录设置为 BuildDirectory

就这样了(几乎)。这将会在构建完成后删除构建服务器上的构建目录,但还有更多事情要做

步骤 2) 确保始终删除目录

如果构建未能编译或遇到任何其他错误,则工作流将抛出异常,并且会错过“删除构建目录”任务。我们通过使用 Try\Catch\Finally 块来解决这个问题,这是工作流工具箱中的一个标准工具

这确保了我们始终删除构建目录,即使在构建过程中发生错误。

步骤 3) 创建 UI

有时在构建后检查构建目录以诊断任何错误是很有用的。我们将为构建工作流提供一个参数和 UI,以便我们可以控制何时删除构建目录。

首先,将一个新的布尔参数 DeleteBuildDirectory 添加到工作流文件

然后我们将更新元数据,这将设置 UI,以便我们可以通过 Visual Studio UI 设置这个新参数。 元数据通过上面高亮的省略号按钮访问。 我们希望编辑对话框,使其看起来像这样。 这在构建定义的“基本”子部分下添加了一个新选项,以控制我们的新参数。

最后,将一个 if/else 活动添加到工作流中,仅当我们的新参数 DeleteBuildDirectory 为 true 时才删除目录

结果是一个可以在构建定义上设置的参数

并且我们有一个构建模板,可以清理自身。您可以在构建日志的末尾看到正在清理的目录。

历史

05/02/2013 - 对源代码的微小修改

© . All rights reserved.