构建自动化期间TFS中的持续集成(CI)问题?

时间:2010-06-07 05:48:43

标签: visual-studio-2008 automation build-automation tfs2008 tfsbuild

我正在使用TFS 2008和Visual Studio,我的老板已指示我为Web项目实施Build Automation for Development和Release版本。

我是Build Automation的新手。

有多个开发人员使用Visual Studio 2008团队系统在不同的计算机上处​​理该项目。源代码已在TFS 2008上维护。正在使用的SQL Server是SQL Server 2000,托管的IIS是Windows Server 2008 x64上的IIS 7.5。

我搜索了网络,发现持续集成和夜间构建是两种重要的构建自动化技术。

我只是想知道与这两种方法相关的任何缺点(CI和夜间构建)。

如果有人可以引导我参加解释这两种技术的工作教程,那将非常有帮助。

还请告诉IIS,SQL Server以及可能是实现构建自动化所必需的任何其他要求。

此外,我想知道是否有其他技术比CI更好?

回复和讨论非常感谢。

由于

1 个答案:

答案 0 :(得分:1)

没有真正的缺点,除了使用CI,您的服务器将更加繁忙。

这些构建的原因是:

NB:每天早上您都有一个完全构建的版本安装程序,您可以对其进行测试。您知道所有代码构建,并且每天都有一个“准备好”的版本,如果您愿意,可以发送。这比让程序员每天花一天时间运行“如何构建发布”文档,以便在每次准备发布新版本时创建安装程序要好得多!并且您的测试人员能够测试完整的发布包,因此您可以确信您的发布和安装过程的每个部分都可以正常运行。

CI:这只是每次有人签入时都会运行的快速构建。它会告诉您是否签入了非编译代码,以便作者可以立即解决问题并最大限度地减少中断给其他团队成员。当4或5个程序员获得最新代码然后发现他们在2小时内无法完成任何工作,直到Fred修复他的错误签到,你可以浪费很多时间。了解破碎的网络允许程序员避免执行Get,除非代码已经过验证工作。

要实现NB和CI,首先需要获得将在您的服务器上运行的构建。

  • 如果您有正在运行的TFS,那么要创建构建服务器,您只需要安装您的开发工具(VS2008以及构建代码所需的任何其他内容,例如第三方库/ build tools等)好像它是一个开发人员PC,它已经准备好用作构建服务器。只需右键单击Builds文件夹和“Create new build”,您就可以随时找出大部分内容。你必须给它一个名字,设置工作区映射以告诉它在哪里构建代码,并设置一个输出文件夹,让结果“被丢弃”,你就会好起来。

  • 您可能需要调整项目的设置以使其工作正常,例如开发人员很难在他们的解决方案中引用“C:\ Projects ...”,当项目移动到buid服务器的D:驱动器时,这通常会破坏。此外,相当恼人的构建服务器将构建代码与您的开发人员PC不同的位置,因此您可能会发现构建过程的某些部分会中断,您将不得不重新配置固定位置等参考资料,以便它们可以在Build和Dev计算机上运行。

  • 尽可能多地添加流程(清理,获取代码,构建它,运行单元测试,混淆二进制文件,签署二进制文件,构建安装程序,签署安装程序,复制到部署文件夹)以便自动执行可以构建一切,只需按一下按钮,您就可以获得完全可释放的产品。计算机擅长这些东西,所以不要因为安装人员而需要一整天的人力奴役而容易出错且费用昂贵!

  • 将NB设置为完全重建(默认情况下应该是这种情况)并使用“触发器”设置让它在每周的每周(例如)凌晨1点运行。 NB应该构建一切(一个好的,彻底的构建)。

  • 复制NB构建设置以进行CI构建。在MSBuild项目文件中,设置以下属性:IncrementalGet = true,IncrementalBuild = true,ForceGet = false。这会将其转换为快速增量构建。在工作区映射,隐藏或删除尽可能多的文件夹,以最大限度地减少从源代码控制获取的代码量,以帮助保持快速。将构建设置为仅构建一个变体(例如Release),因此它将是一个快速构建。在触发器中(右键单击构建并编辑它),只要有签入就将其设置为构建。

  • 在所有开发机器上运行构建监视器。这会在图标托盘中放置一个图标,并在构建开始,完成和失败时为您提供可选通知。如果您的CI构建失败,您将立即了解它。

现在,您应该每天早上准备好每晚进行测试,每当有人检查任何更改时,新的增量构建将启动,并且您将在几分钟内知道您是否在源代码中破坏了代码库控制。

(我们有第三个构建,这是一个增量的测试构建。这与CI构建相同,但它也运行我们所有的单元测试。这是每晚执行的,开发人员可以随时触发它验证服务器上的代码库(我们在升级到测试分支之前将其用作门控机制)。它比CI测试慢很多,这就是为什么它不用于CI构建 - 你希望CI构建完成尽快)

注意:要使CI工作,有时需要进行完全重建。在“队列构建”对话框中,输入以下命令行选项以强制执行此操作:

/p:IncrementalGet=false;ForceGet=true;IncrementalBuild=false

没有任何技术比CI更“优秀”。除了您实施的所有其他流程之外,您还可以(并且应该)使用CI。