我认为这里的每个人都会同意,为了被认为是一个专业的软件公司,你必须拥有许多基本的东西。
毫无疑问,这些东西中的一个是构建服务器,问题是,你需要走多远。
如果我们能列出业余开发人员可以采取的一些简单任务,以便将它们设置在一个功能齐全的构建服务器的正确轨道上,那就太棒了。
听说有人认为他们拥有“完整”的系统设置,可以执行他们需要的所有功能以及他们如何从头开始设置所有功能,这也是一件好事。
答案 0 :(得分:12)
您可以先查看Cruise Control。
如果这是你的毒药,还有CruiseControl.net。
基本上,您需要以下成分:
在这种情况下,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)
大致有序 - 通过更复杂的
最小/最不复杂不要害怕只是从批处理文件或shell脚本或其他临时方式开始。在CI热潮之前,人们制作了非常好的软件。在哈德森和克鲁斯控制之前有很多好的过程 - (我不是在敲击那些或其他人 - 我在其他人中使用哈德森) - 但不要错过这一点 - 这些东西在这里帮助你 - 不要成为霸道的过程)< / p>
答案 8 :(得分:0)
我无法向您提供有关我们如何设置构建服务器的所有详细信息(我只是在开始时参与),但是:
我们将它用于由提交触发的构建:这些只是构建二进制文件并运行单元测试。从这里开始,我们可以进行完整的构建,也可以进行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。