如何使用构建服务器启动并运行?

时间:2009-01-20 10:57:39

标签: build build-process build-automation

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

毫无疑问,这些东西中的一个是构建服务器,问题是,你需要走多远。

  • 构建服务器的最低要求是什么? (某处只是编译?)
  • 构建服务器的最终目标是什么? (计划的,源代码控制集成,自动部署到测试/实时服务器)
  • 假设你现在什么都没有,开始的好地方在哪里?

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

听说有人认为他们拥有“完整”的系统设置,可以执行他们需要的所有功能以及他们如何从头开始设置所有功能,这也是一件好事。

12 个答案:

答案 0 :(得分:12)

您可以先查看Cruise Control

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

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

  • 专用环境(虚拟机/服务器。不要使用开发人员的计算机,除非只是你。即使这样,如果可以的话也要运行虚拟机。当/如果有的话,可以更容易地将它移动到服务器上你的组织)
  • 支持已标记/已标记修订的源代码管理系统(例如,Subversion + TortoiseSVN
  • 构建脚本。这些可以是使用命令行启动devenv.exe或msbuild.exe应用程序的批处理文件,也可以使用AntNAnt之类的内容。

在这种情况下,CruiseControl充当Continous Integration服务器,并且可以确保在检入代码时完成构建。这意味着你知道the build is broken是否比你刚做夜间版本更快。不过,您可能也应该有夜间构建。

答案 1 :(得分:4)

Hudson是一个很棒的CI。

我们在本地运行农场,但我们开始下载hudson.war并进行

  

java -jar hudson.war

它与SCM集成,错误运输系统真的很棒。

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

到目前为止,享受它是最直接的CI解决方案。

HTH,    休伯特。

答案 2 :(得分:2)

如果您正在使用Cruise Control,那么可以手动启动Ant build.xml。

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

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

答案 3 :(得分:2)

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

对于基本构建服务器 - 使用其中一个CI产品监视源控件,并在检测到更改时触发构建。例如:cruiseControl。

一旦获得基本构建 - 在成功构建之后添加单元测试的运行。

我所拥有的最成功的系统有3种不同的构建: -   - 一个在办理登机手续时开除的 - 所有这一切都是建立代码。   - 按需构建应用程序,生成安装程序然后放入    安装程序进入共享驱动器,供测试人员选择   - 每天晚上10点开火。这个:            - 运行一些代码生成来从UML模型构建DB和C#代码            - 构建代码            - 在测试oracle实例上创建了一个新的构建验证测试用户            - 将应用程序架构运行到数据库中            - 解雇了一堆单元测试            - 清理db用户(如果测试成功)            - 运行覆盖率分析以构建单位代码覆盖率的报告

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

答案 4 :(得分:2)

首先阅读Martin Fowler关于Continuous Integration的优秀论文。

我们为一个重大项目建立了这样一个系统> 2,000 kSLOC,它证明了它非常宝贵。

HTH

欢呼声,

罗布

答案 5 :(得分:2)

Cruise,Maven,Hudson等都很棒,但它总是值得一个权宜之计。

您应该有一个批处理文件,shell脚本或简单的书面说明,允许您从任何计算机运行构建。我们过去没有构建服务器,并且能够快速切换到另一台机器是非常宝贵的!

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

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

答案 6 :(得分:1)

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

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

接下来,我的CruiseControl.NET构建服务器也使用了这个构建脚本。如果已对源控件进行了更改,它会定期检查 如果发生这种情况,CC.NET将执行我在buildscript中定义的“get-latest”任务,构建所有内容,执行单元测试并执行静态代码分析(fxcop)。

我的'buildserver'只是一个旧工作站。它是一个PIV,3Ghz,1GB内存,它完美地完成了它的工作。

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

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

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

[1]:CruiseControl的主页

答案 7 :(得分:1)

大致有序 - 通过更复杂的

最小/最不复杂
  • 能够在任何机器上获得一组特定的来源
  • 能够构建该源(没有问题)
  • 能够(安排)每晚或/或其他一些定义的时段进行构建而无需用户干预
  • 一个(或多个)专用构建服务器(不作为qa或dev机器共享)
  • 能够在每次签到/提交后进行构建
  • 在构建
  • 后通知相关方构建状态
  • 随时提供构建状态
  • 创建安装程序作为构建
  • 的一部分
  • 如果构建良好,部署/生活的能力
  • 运行单元测试
  • 在产品上运行测试
  • 报告这些测试的结果
  • 静态代码分析和报告 ... 而且这个清单一直在继续

不要害怕只是从批处理文件或shell脚本或其他临时方式开始。在CI热潮之前,人们制作了非常好的软件。在哈德森和克鲁斯控制之前有很多好的过程 - (我不是在敲击那些或其他人 - 我在其他人中使用哈德森) - 但不要错过这一点 - 这些东西在这里帮助你 - 不要成为霸道的过程)< / p>

答案 8 :(得分:0)

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

  1. 我们开始使用内部系统,在ASP.NET和.NET Windows服务中实现,使用NAnt进行实际构建。实际上,大多数工作流程都是在NAnt中实现的(例如通过电子邮件发送给人们,复制内容等)。
  2. 我们搬到了JetBrains TeamCity(有一个免费的缩减版本),它仍然很好地为我们服务。
  3. 我们将它用于由提交触发的构建:这些只是构建二进制文件并运行单元测试。从这里开始,我们可以进行完整的构建,也可以进行MSI。从那里开始,我们有一个系统测试版本,可以在使用虚拟机构建的环境中运行更深入的测试(使用单独的域控制器,SQL Server框等)。当系统测试通过时,构建可供我们的QA部门进行手动测试和一些我们尚未自动化的回归测试。

答案 9 :(得分:0)

在java空间中,我测试了大多数可用的构建环境。自动构建的问题是你经常花费相当多的时间来跟进它。在我们从atlassian切换到商业bamboo之后,我们发现我们必须花费更少的时间来呵护构建盒,在我们的情况下,这是非常好的经济。 Bamboo还支持群集,因此您可以随着需求的增加添加廉价的盒子。

答案 10 :(得分:0)

尝试&amp;在建筑方面找到适合您现有做法的东西 - 例如它不适合试试&amp;例如,如果您正在使用Maven,请使用基于Ant的构建服务器!

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

答案 11 :(得分:0)

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

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