14

我想这里的每个人都会同意,为了被认为是专业的软件公司,你必须具备一些基本的东西。

毫无疑问,其中之一就是构建服务器,问题是,你需要走多远。

  • 构建服务器的最低要求是什么?(只是编译的地方?)
  • 您构建服务器的最终目标是什么?(计划、源代码控制集成、自动部署到测试/实时服务器)
  • 假设您目前一无所有,从哪里开始?

如果我们可以列出一些业余开发人员可以参与的简单任务,以便将它们设置在功能齐全的构建服务器的正确轨道上,那就太好了。

听到人们觉得他们拥有一个“完整的”系统设置来执行他们需要的所有功能以及他们如何从头开始设置它也是一件好事。

4

12 回答 12

12

您可以从查看Cruise Control开始。

如果那是你的毒药,还有CruiseControl.net 。

但基本上,您需要以下成分:

  • 专用环境(虚拟机/服务器。不要使用开发人员的机器,除非只有你自己。即便如此,如果可以的话,运行虚拟机。当/如果您的组织中可用时,将其移动到服务器要容易得多)
  • 支持标记/标记修订的源代码控制系统(例如,Subversion + TortoiseSVN
  • 构建脚本。这些可以是使用命令行启动 devenv.exe 或 msbuild.exe 应用程序的批处理文件,或者您可以使用AntNAnt之类的东西。

在这种情况下,CruiseControl 充当持续集成服务器,并且可以确保您在签入代码时已完成构建。这意味着您知道构建是否会比仅夜间构建更快地被破坏。不过,您可能还应该有夜间构建。

于 2009-01-20T10:59:46.527 回答
4

Hudson是一个伟大的 CI。

我们在本地运行农场,但我们首先下载 hudson.war 并做

java -jar hudson.war

它与 SCM、bug 卡车系统集成,真是太棒了。

如果要保留旧版本,则需要一些磁盘空间。

享受它是迄今为止最直接的 CI 解决方案。

HTH,休伯特。

于 2009-01-20T15:21:38.370 回答
2

如果您正在使用 Cruise Control,则可以从手动完成工作的 Ant build.xml 开始。

您需要一个可以进行标记签出的版本控制系统。

您需要使用 Ant 任务运行 JUnit 测试并生成 HTML 报告。

于 2009-01-20T11:01:51.403 回答
2

我说你必须从实施构建策略开始,这样你才能以结构化的方式构建代码——我使用 NANT。

对于基本的构建服务器 - 使用其中一种 CI 产品来监控您的源代码控制并在检测到更改时触发构建。例如:巡航控制。

一旦您将基本构建放在一起 - 在成功构建后添加单元测试的运行。

我拥有的最成功的系统有 3 个不同的构建:- - 一个在签入时触发 - 所有这些都是构建代码。- 按需构建应用程序,生成安装程序,然后将安装程序放入共享驱动器以供测试人员获取 - 每天晚上 10 点触发的构建。这: - 运行一些代码生成以从 UML 模型构建 DB 和 C# 代码 - 构建代码 - 在测试 oracle 实例上创建新的构建验证测试用户 - 将应用程序模式运行到 db - 启动了一堆单元测试- 清理 db 用户(如果测试成功) - 运行覆盖率分析以构建单元代码覆盖率报告

我们为此使用的软件是 NANT、CruiseControl.NET、自定义代码生成系统、用于构建 oracle 模式的自定义应用程序以及用于代码分析的 NCover。

于 2009-01-20T11:11:10.043 回答
2

首先阅读 Martin Fowler 关于持续集成的优秀论文。

我们为一个大于 2,000 kSLOC 的大型项目构建了这样一个系统,它证明了自己的价值。

高温高压

干杯,

于 2009-01-20T11:11:25.660 回答
2

Cruise、Maven、Hudson 等都很棒,但它总是值得有一个权宜之计的解决方案。

您应该有一个批处理文件、shell 脚本或简单的书面指令,允许您从任何机器运行构建。我们过去曾有过构建服务器不可用的情况,快速切换到另一台机器的能力非常宝贵!

除非你有一个怪物项目,否则构建机器的规格并不重要。我们尝试将构建时间缩短到 10 分钟(包括单元测试),并且我们有一个相当大的项目。

不要因为“现有的工具都不够好”而试图创建或编写自己的构建系统。所有现代构建系统都允许您编写插件来执行自定义操作。

于 2009-01-22T08:51:49.280 回答
1

我正在使用 Cruisecontrol.NET 和 msbuild buildscript。

我可以手动使用构建脚本,以便获得最新版本的代码库,使用命令行非常轻松地构建代码库。(如果您正在处理由多个解决方案组成的应用程序,这将非常有趣)。

除此之外,我的 CruiseControl.NET 构建服务器也使用这个构建脚本。它会定期检查是否有更改提交到源代码控制。
如果发生这种情况,CC.NET 将执行我在 buildscript 中定义的“获取最新”任务,构建所有内容,执行单元测试并执行静态代码分析 (fxcop)。

我的“buildserver”只是一个旧工作站。这是一个 PIV,3Ghz 和 1gb RAM,它完美地完成了它的工作。

我觉得有趣的另一件事是能够自动部署新版本或构建设置。我还没有这样做,因为我不确定这是否是一个好主意,也没有找到一个好的策略来这样做......我的意思是;将某些组件的新版本部署到关键任务应用程序的生产环境中是个好主意吗?我不这么认为...

我认为这是一个很好的起点:[ http://confluence.public.thoughtworks.org/display/CC/Home;jsessionid=5201DA7E8D361EB164C40E519DA0F0DE][1]

至少,这是我在设置构建服务器时开始寻找的地方。:)

[1]:CruiseControl 主页

于 2009-01-20T11:23:22.110 回答
1

大致按顺序 - 通过更复杂的最小/最不复杂

  • 能够在任何机器上获取一组特定的源
  • 能够构建该源(没有问题)
  • 能够(安排)每晚/或其他定义的时间段构建,无需用户干预
  • 一个(或多个)专用构建服务器(不共享为 qa 或 dev 机器)
  • 能够在每次签入/提交后进行构建
  • 在构建后通知相关方构建状态
  • 随时提供构建状态
  • 创建安装程序作为构建的一部分
  • 如果构建良好,则能够部署/运行
  • 运行单元测试
  • 在产品上运行测试
  • 报告这些测试的结果
  • 静态代码分析和报告……不胜枚举

不要害怕从批处理文件或 shell 脚本或其他临时方法开始。在 CI 热潮之前,人们制作了非常好的软件。在 Hudson 和 Cruise Control 之前有很多好的流程 ​​- (我不是在敲那些或其他 - 我使用 Hudson 等) - 但不要错过重点 - 这些东西是为了帮助你 - 不要成为霸道的过程)

于 2009-10-18T23:36:20.117 回答
0

我无法向您提供有关我们如何设置构建服务器的所有详细信息(我只是在一开始就参与其中),但是:

  1. 我们从内部系统开始,在 ASP.NET 和 .NET Windows 服务中实现,使用 NAnt 进行实际构建。实际上,大部分工作流程都是在 NAnt 中实现的(例如,给人们发电子邮件、复制东西等等)。
  2. 我们搬到了 JetBrains TeamCity(有一个免费的精简版),它仍然为我们服务。

我们将它用于由提交触发的构建:这些只是构建二进制文件并运行单元测试。从这里,我们可以进行完整的构建,MSI 也是如此。从那里,我们有系统测试版本,可以在使用虚拟机(带有单独的域控制器、SQL Server 框等)构建的环境中运行更深入的测试。当系统测试通过时,我们的 QA 部门可以使用该构建进行手动测试和一些我们尚未自动化的回归测试。

于 2009-01-20T11:07:23.657 回答
0

在 java 空间中,我测试了大多数可用的构建环境。自动构建的问题是您通常最终会花费大量时间来跟踪它。在我们从 atlassian 切换到商业竹子之后,我们发现我们必须花更少的时间来呵护构建盒,这在我们的案例中证明是非常经济的。Bamboo 还支持集群,因此您可以根据需要添加便宜的盒子。

于 2009-01-20T11:13:14.953 回答
0

在构建方面尝试并找到适合您现有实践的东西 - 例如,如果您正在使用 Maven,那么尝试和使用基于 Ant 的构建服务器将不是一个很好的选择!

理想情况下,它应该能够监视您的源代码控制系统、检查代码、构建、运行一些测试并在您不知道的情况下发布结果,或者至少直到它报告失败为止。就个人而言,我建议将 Hudson ( https://hudson.dev.java.net/ ) 作为一个很好的起点,因为它很容易安装和运行并且具有不错的 UI。

于 2009-01-20T13:02:17.900 回答
0

我们首先编写将在开发人员机器上运行的批处理脚本。一旦我们使所有流程自动化,我们将它们移动到构建服务器。

在工具方面,我们目前正在从 Cruise Control 转移到 TFS。

于 2009-11-01T22:01:47.360 回答