【发布时间】:2008-08-27 12:20:48
【问题描述】:
设置集成服务器时,我对使用多个任务完成构建的最佳方法表示怀疑。最好的方式是只做一项大工作还是做一些小的依赖?
【问题讨论】:
标签: continuous-integration integration-testing
设置集成服务器时,我对使用多个任务完成构建的最佳方法表示怀疑。最好的方式是只做一项大工作还是做一些小的依赖?
【问题讨论】:
标签: continuous-integration integration-testing
你肯定想分解任务。这是 CruiseControl.NET 配置的一个很好的示例,每个步骤都有不同的目标(任务)。它还使用了一个 common.build 文件,该文件可以在几乎不需要自定义的项目之间共享。
http://code.google.com/p/dot-net-reference-app/source/browse/#svn/trunk
【讨论】:
我将 TeamCity 与 nant 构建脚本一起使用。 TeamCity 可以轻松设置 CI 服务器部分,而 nant 构建脚本可以轻松完成报告生成方面的许多任务。
这是我写的一篇关于在 CruiseControl.NET 中使用 CI 的文章,它在 cmets 中有一个可以跨项目重复使用的 nant 构建脚本:
【讨论】:
我喜欢的方法是以下设置(实际上假设您在一个 .NET 项目中):
在许多项目中,您会发现当有人签到时会进行不同级别的测试和活动。有时,这些可能会随着时间的推移而增加,以至于在构建之后很长一段时间,开发人员才能看到他们是否通过签入破坏了构建。
在这些情况下我所做的是创建三个构建(或者可能两个):
任何 CI 系统的关键在于它必须是有机的,并且需要不断地进行调整。 CruiseControl.NET 有一些很棒的扩展,它们记录和图表构建时间等步骤,并让您进行历史分析,因此允许您不断调整构建以保持它们的敏捷性。经理们很难接受一个构建框可能会让您忙于工作时间的五分之一,只是为了阻止它停止运行。
【讨论】:
我们使用buildbot,将构建分解为离散的步骤。在以足够的粒度分解构建步骤和成为一个完整的单元之间找到平衡。
例如,在我目前的职位上,我们在各自的平台上为每个平台(Mac、Linux、Windows)构建子部分。然后,我们有一个步骤(包含几个子步骤)将它们编译成最终版本,最终将出现在最终发行版中。
如果这些步骤中的任何一个出现问题,很容易诊断出来。
我的建议是尽可能用模糊的术语在白板上写下这些步骤,然后以此为基础。就我而言,这将是:
【讨论】:
我肯定会分解工作。您可能会在构建中进行更改,如果您有较小的任务而不是搜索一个单一的构建,那么跟踪问题会更容易。
无论如何,您应该能够从较小的部分创建一个大工作。
【讨论】:
生日,
当您谈论集成测试时,我的大(显而易见)提示是使测试服务器的构建和配置尽可能接近部署环境。
</thebloodyobvious> (-:
干杯, 抢
【讨论】:
将您的任务分解为离散的目标/操作,然后使用更高级别的脚本将它们适当地结合在一起。
这使其他人更容易理解您的构建过程(您在进行过程中进行记录,以便团队中的任何人都可以了解它,对吗?),并增加了重用的可能性。您可能不会重用高级脚本(尽管如果您有类似的项目,这可能是可能的),但您绝对可以相当轻松地重用(即使是复制/粘贴)离散操作。
考虑从您的存储库获取最新源的示例。您需要将用于检索代码的任务/操作与一些日志记录语句进行分组,并参考适当的帐户信息。这是一种很容易从一个项目重用到下一个项目的东西。
对于我团队的环境,我们使用 NAnt,因为它在开发机器(我们编写/调试脚本的地方)和 CI 服务器(因为我们只是在干净的环境中执行相同的脚本)之间提供了一个通用的脚本环境。我们使用 Jenkins 来管理我们的构建,但每个项目的核心只是调用相同的 NAnt 脚本,然后我们操纵结果(即归档构建输出、标记失败的测试等)。
【讨论】: