我正在与一个小型(4 人)开发团队合作开发一个 C# 项目。我建议设置一台构建机器来进行项目的夜间构建和测试,因为我知道这是一件好事。问题是,我们这里没有太多预算,所以我必须向当权者证明这笔开支是合理的。所以我想知道:

  • 我需要什么样的工具/许可证?现在,我们使用 Visual Studio 和 Smart Assembly 进行构建,并使用 Perforce 进行源代码控制。我还需要其他东西吗,或者是否有相当于 cron 作业的东西来运行自动化脚本?
  • 除了表明构建已损坏之外,这到底会给我带来什么?我是否应该在此解决方案(sln 文件)中设置将由这些脚本运行的测试项目,以便我可以测试特定的功能?目前,我们有两个这样的测试,因为我们没有时间(或者坦率地说,没有经验)来进行良好的单元测试。
  • 为此我需要什么样的硬件?
  • 一旦构建完成并经过测试,通常的做法是将其构建到 ftp 站点上还是通过其他方式进行内部访问?这个想法是这台机器使 构建,我们都会进行它,但如果需要的话可以进行调试构建。
  • 我们应该多久进行一次这种构建?
  • 空间如何管理?如果我们每晚进行构建,我们应该保留所有旧的构建,还是在大约一周左右开始抛弃它们?
  • 还有什么我在这里没有看到的吗?

    我意识到这是一个非常大的话题,而我才刚刚开始。我在这里找不到这个问题的重复项,如果我应该得到一本书,请告诉我。

    编辑:我终于开始工作了!Hudson 非常棒,FxCop 表明我们认为已实现的一些功能实际上并不完整。我们还必须将安装程序类型从 Old-And-Busted vdproj 更改为 New Hotness WiX。

    基本上,对于那些关注的人来说,如果您可以从命令行运行构建,那么您可以将其放入 hudson。通过 MSBuild 从命令行运行构建本身就是一项有用的练习,因为它迫使您的工具保持最新状态。

  • 有帮助吗?

    解决方案

    更新: 詹金斯 是 Hudson 的最新版本。现在每个人都应该使用 Jenkins。我将相应地更新链接。

    哈德逊 是免费的,并且非常容易配置,并且可以轻松地在虚拟机上运行。

    部分来自我的旧帖子:

    我们用它来

    • 部署Windows服务
    • 部署网络服务
    • 运行 MSTests 并显示与任何 junit 测试一样多的信息
    • 跟踪低、中、高任务
    • 趋势图警告和错误

    以下是 Hudson 支持的一些内置 .net 内容

    另外,上帝禁止你使用安全的视觉源, 它也支持这一点. 。我建议你看一下 Redsolo 关于使用 Hudson 构建 .net 项目的文章

    你的问题

    • :我需要什么样的工具/许可证?现在,我们使用 Visual Studio 和 Smart Assembly 进行构建,并使用 Perforce 进行源代码控制。我还需要其他东西吗,或者是否有相当于 cron 作业的东西来运行自动化脚本?

    • A: 我刚刚在 VM 的新副本上安装了 Visual Studio,该 VM 运行全新的、已修补的 Windows 服务器操作系统安装。所以你需要许可证来处理这个问题。Hudson 会将其自身安装为 Windows 服务并在端口 8080 上运行,您将配置希望它扫描代码存储库以获取更新代码的频率,或者您可以告诉它在特定时间进行构建。全部可通过浏览器进行配置。

    • 问: 除了表明构建已损坏之外,这到底会给我带来什么?我是否应该在此解决方案(sln 文件)中设置将由这些脚本运行的测试项目,以便我可以测试特定的功能?目前,我们有两个这样的测试,因为我们没有时间(或者坦率地说,没有经验)来进行良好的单元测试。

      A: 第一次构建失败或变得不稳定时,您将收到一封电子邮件。如果单元测试失败,则构建不稳定,或者可以通过您设置的任意数量的标准将其标记为不稳定。当单元测试或构建失败时,您将收到电子邮件,其中会告诉您失败的地点、原因和方式。根据我的配置,我们得到:

      • 自上次工作构建以来的所有提交列表
      • 这些提交的提交注释
      • 提交中更改的文件列表
      • 构建本身的控制台输出,显示错误或测试失败
    • 问: 为此我需要什么样的硬件?

      A: 一个虚拟机就足够了

    • 问: 一旦构建完成并经过测试,通常的做法是将其构建到 ftp 站点上还是通过其他方式进行内部访问?我们的想法是,这台机器进行构建,我们都可以进行构建,但如果需要的话可以进行调试构建。

      A: Hudson 可以用它做任何你想做的事情,包括通过 md5 哈希识别它、上传它、复制它、存档它等等。它会自动执行此操作,并为您提供构建工件的长期运行历史记录。

    • 问: 我们应该多久进行一次这种构建?

      A: 我们每小时轮询 SVN,寻找代码更改,然后运行构建。每晚还可以,但在我看来有点毫无价值,因为当你早上上班时,你昨天所做的事情不会在你的脑海中记忆犹新。

    • 问: 空间如何管理?如果我们每晚进行构建,我们应该保留所有旧的构建,还是在大约一周左右开始抛弃它们?

      A: 这取决于你,经过这么长时间,我将构建工件移动到长期存储或删除它们,但是存储在我保留的文本文件/xml 文件中的所有数据,这让我可以将更改日志、趋势图等存储在服务器占用的空间非常小。您还可以将 Hudson 设置为仅保留尾随构建中的工件

    • 问: 还有什么我在这里没有看到的吗?

      A: 不,现在就去找 Hudson,你不会失望的!

    其他提示

    我们在以下组合中获得了好运:

    1. Visual Studio(具体来说,使用MSBuild.exe命令行工具并将其传递给我们的解决方案文件。删除了对msbuild脚本的需求)
    2. NAnt (比XML语法/任务库更好于MSBuild。还有P4 src控制操作的选项)
    3. CruiseControl.net - 内置于网络信息中心用于监控/启动构建。
    4. CCNet内置通知程序,可在构建成功/失败时发送电子邮件

      关于理由:这可以减轻开发人员进行手动构建的负担,并且可以将人为错误排除在外。很难量化这种效果,但一旦你这样做,你将永远不会回去。拥有可重复的过程来构建和发布软件是至关重要的。我确信你已经成为他们手工构建软件的地方,它会在野外出现,只是让你的构建人员说“哎呀,我一定忘记包含那个新的DLL!”

      在硬件上:尽可能强大。更多功率/内存=更快的构建时间。如果你能负担得起,无论团队规模有多小,你都不会后悔获得一台顶级的制造机器。

      在空间:有助于拥有足够的硬盘空间。您可以制作NAnt脚本以在每次构建开始时删除中间文件,因此真正的问题是保留日志历史记录和旧应用程序安装程序。我们有监控磁盘空间并发送警报的软件。然后我们手动清理驱动器。通常需要每3-4个月完成一次。

      关于构建通知:这是内置于CCNet的,但如果您要添加自动化测试作为额外步骤,那么从一开始就将其构建到项目中。一旦项目变大,很难回溯测试。有大量关于测试框架的信息(可能还有大量关于SO的信息),因此我将推迟命名任何特定工具。

    在我之前的工作场所,我们使用了 TeamCity 。它使用起来非常简单和强大。它可以免费使用,但有一些限制。还有一个关于 Dime Casts 的教程。我们没有使用CruiseControl.NET的原因是我们有很多小项目,在CC.NET中设置每个项目都非常痛苦。我强烈推荐TeamCity。总结一下,如果你是开源软件,那么CC.NET就是那个学习曲线略高的大爸爸。如果您的预算允许您使用TeamCity或查看免费版本。

    如何?看看卡雷尔·洛茨的 博客.

    为什么?我能想到的原因有几个:

    • 正确实施后的有效构建意味着所有开发人员 当构建为绿色时在他们的机器上构建
    • 正确实施后的工作构建意味着您可以随时部署
    • 正确实施后的工作构建意味着您发布的任何内容都已访问您的源代码控制系统。
    • 如果正确实施,有效的构建意味着您可以尽早并经常进行集成,从而降低集成风险。

    马丁·福勒的文章 持续集成 仍然是最终文本。看看它!

    赞成的主要理由是,它会通过提醒您尽快发现构建中断或测试失败来降低开发过程的成本。

    整合多个开发人员的工作的问题是团队成长的主要危险。团队越大,就越难协调他们的工作并阻止他们搞乱彼此的变化。唯一好的解决方案是通过在完成后检查小工作单元(有时称为“故事”)来告诉他们“早期和经常整合”。

    您应该在一天中进行某些检查时重建构建计算机。使用Cruise Control,您可以在任务栏上获得一个图标,当构建中断时,该图标会变为红色(甚至可以与您交谈!)。

    然后,您应该进行夜间全面清理构建,其中标记了源版本(给定唯一的构建号),您可以选择将其发布给您的利益相关者(产品经理,QA人员)。这是因为当报告错误时,它与已知的构建号相对(这非常重要)。

    理想情况下,您应该有一个可以下载构建的内部站点,并且有一个按钮,您可以单击以发布之前的每晚构建。

    只是想在 mjmarsh 所说的基础上再做一点贡献,因为他奠定了很好的基础......

    • 视觉工作室。MSBuild 工作正常。
    • 南安特.
    • 南特贡献. 。这将提供额外的任务,例如 Perforce 操作。
    • CruiseControl.net. 。这基本上又是您的“构建仪表板”。

    上述所有内容(除了 VS)都是开源的,因此您不需要任何额外的许可。

    正如 Earwicker 提到的,尽早构建,经常构建。知道某些东西出了问题,并且可以生成可交付成果,这对于尽早发现问题非常有用。

    NAnt 包括以下任务 努尼特/神经单元2 同样,您实际上可以自动化单元测试。然后,您可以将样式表应用于结果,并在 CruiseControl.net 提供的框架的帮助下,为每个构建提供良好的可读、可打印的单元测试结果。

    这同样适用于 恩多克 任务。为每个构建生成并提供文档。

    您甚至可以使用 执行 任务来执行其他命令,例如,使用 InstallShield 生成 Windows Installer。


    我们的想法是尽可能自动化构建,因为人类会犯错误。前期花费的时间可以节省后期的时间。人们不必通过完成构建过程来照顾构建。确定构建的所有步骤,为每项任务创建 NAnt 脚本,并逐一构建 NAnt 脚本,直到完全自动化整个构建过程。然后,它还会将所有构建放在一个位置,这有利于比较。Build 426 中出现的某些问题在 Build 380 中运行良好?好吧,已经有可供测试的可交付成果了——抓住它们并进行测试。

    • 无需许可证。CruiseControl.net 是免费提供的,只需要 .NET sdk 即可构建。
    • 即使没有自动化单元测试,构建服务器仍然可以为构建版本提供受控环境。不再有“约翰通常在他的机器上构建,但他生病了。由于某种原因,我无法在我的机器上构建”
    • 现在我在虚拟 PC 会话中设置了一个。
    • 是的。构建需要转储到可访问的地方。开发版本应该打开调试。发布版本应该将其关闭。
    • 多久一次取决于你。如果设置正确,您可以在每次签入后构建,开销非常小。如果您已经(或计划进行)单元测试,这是一个好主意。
    • 根据需要保留里程碑和版本。其他任何事情都取决于您构建的频率:连续地?丢弃。日常的?保留一周的价值。每周?保留两个月的量。

    您的项目越大,您就越能看到自动化构建机器的好处。

    关于构建的健康状况。这会让你获得的是你可以设置你想要在构建中发生的任何类型的事情。在这些中,您可以运行测试,静态分析和分析器。 当您最近处理应用程序的这一部分时,问题的处理速度要快得多。如果你做了一些小改动,那么它几乎会告诉你你在哪里破坏它:)

    当然,假设您将其设置为每次签入时都进行构建(持续集成)。

    它还有助于让QA和Dev更接近。您可以设置与其一起运行的功能测试,以及分析器和其他任何可以改善开发团队反馈的内容。这并不意味着每次签入都会运行功能测试(可能需要一段时间),但是您可以使用整个团队通用的工具来设置构建/测试。我一直在自动化烟雾测试,所以在我的情况下,我们更紧密地合作。

    为什么: 10年前,我们作为软件开发人员用来分析某些东西到第n级获取文件(用人类语言编写)'签字'然后开始编写代码。我们将进行单元测试,字符串测试然后我们将进行系统测试:系统作为一个整体第一次一起运行,有时是在我们签署文件后的一周或几个月。只有到那时我们才会发现我们分析所有内容时所有的假设和误解。

    持续集成as和idea使您能够构建一个完整的(尽管最初非常简单的)系统端到端。随着时间的推移,系统功能正交建立。每次完成构建时,您都会尽早并经常进行系统测试。这意味着您可以尽早找到并修复错误和假设,这是修复它们的最便宜的时间。

    如何: 关于如何,我不久前在博客上发表了这篇文章:[点击这里]

    在8个帖子中,它逐步介绍了如何在Windows环境中为.NET解决方案设置Jenkins服务器。

    许可以下: CC-BY-SA归因
    不隶属于 StackOverflow
    scroll top