什么构成良好的CI建立的进程?

我们用词,但是部署到生产,即使一个现实的CI的目标的时候你必须依赖几种服务,即应部署也和其他应用程序可以取决于这些。

是一个很好的好的CI的建立过程不够好时,其自动化的质量保证和手册,从那里?

有帮助吗?

解决方案

很好"这取决于":)

我们使用我们的CI系统:

  1. 建立和单元的测试
  2. 部署到单箱、运行一体化测试和分析代码
  3. 部署到实验室环境
  4. 运行验收试验中产像系统
  5. 拉建立通向代码,用于生产的部署

这个是为新建项目的大约十几个服务和数据库部署到20多个服务器,也不得不依赖关系的一半,其他十几个'外部'的服务。

使用CI工具部署到你的产品到生产环境作为一个现实的目标?再次..."它依靠"

为什么你要这么做?

  • 如果你有的过程中,你可以滚变化(滚回)更快速和更经常的
  • 机会少人为错误的
  • 你可以测试同样的战略部署在测试环境中去之前要的生产和抓住问题的更早

一些技术上的东西你需要地址在你可以回答这样的:

  • 什么是正常运行时间要求对系统--你是允许有停机时间或是否需要立了24/7的?
  • 你有没有更改控制程序,需要人为的干预/核准?
  • 是你的部署足的任何组件以回滚到一个已知良好状态,如果部署失败?
  • 是的你的系统设计用于处理不同版本的服务,或客户情况的一个或几个组成部署失败(及你有上述回滚到最后所知的良好的)?
  • 不会的过程中有智慧,以处理一部分部署在那里的一分不能处理混合版本的依赖关系/客户?
  • 你是怎么移交的数据库部署/升级?
  • 你有没有监视的地方让你知道当事情出错了?

这里有几个最近的相关链接有关 自动化建筑物所需的工具.

当它发生的时候它更复杂的系统更困难的是做的一切自动化,但这并不意味着它不是一个值得追求的目标,它只是需要更多的努力和毅力去做--一切都从知道的困难你就要面对的问题你要帐户(故障 发生),将政治挑战的基础设施建设(与更多的产品特点)。

现在下面有大秘密...技术上的挑战是具有挑战性的,但不是不可能的...的 政治 挑战可能是不可逾越的。一切关于这一费用的金钱是否是其开发的时间或购买第3次缔约方解决方案。所以真的,你可以建立美元1K,$10,$100美元1M的解决方案吗?

无论你去确保自动化是坚固第一,完成第二...即确保你已经为强大一方案为你可以得到部署,以测试环境,而不是一个脆弱的解决方案,部署到生产。

其他提示

CI不是一种部署机制。让你的CI执行任何自动部署到QA /测试服务器 是好的,以确保你的构建的那些方面工作,但我不会使用像Cruise Control或Bamboo这样的CI系统部署。

CI用于定期构建代码库,以自动执行自动化测试,通过静态分析验证代码库以及其他性质的检查。

确保您了解CI构建背后的理念。 CI代表持续集成,CI构建真正意图是当开发人员将代码检入源控制系统(或以某个指定的间隔)执行时执行的丢弃构建,以确保最新的更改不会破坏代码库(因此,不断将更改集成到代码库中的想法)。

为此,与构建期间实际发生的情况相比,用于实际构建服务器进程的技术在很大程度上是无关紧要的。正如@pdavis所提到的,CI构建应该编译代码库,执行一些代码分析(FxCop,StyleCop,Lint等),执行单元测试和代码覆盖,并执行任何其他应该影响概念的自定义分析一个“成功的”或“失败”建立。

将CI构建自动部署到环境中确实不受构建服务器的控制。话虽这么说,您总是可以创建一个单独的项目,该项目在构建服务器上运行,当它检测到某些条件(例如构建成功完成)时处理部署,但这应该始终作为一个完全独立的事情来完成。

我正在开始一个我真正期待的新项目。我们仍处于初始设计阶段,最近刚刚完成了逻辑系统架构。我们为测试和登台环境订购了新服务器,并且正在建立基于Cruise Control的持续集成(CI)构建系统( http://cruisecontrol.sourceforge.net/ )和MSBuild( http://msdn2.microsoft.com/en-us/library/wea2sca5.aspx )这是一个改进的ANT端口。看来Visual Studio 2005项目和解决方案文件现在都是MSBuild格式。 Cruise Control将自动从Visual Source Safe中拉出源代码(好吧,它不是Subversion但我们可以处理),编译它,然后通过fxCop运行它( http://www.gotdotnet.com/Team/FxCop/ ),nUnit( http://www.nunit.org/ ),nCover( http ://ncover.org/site/ ),最后但不租赁Simian( http://www.redhillconsulting.com.au/products/simian/ )。 Cruise Control有一个非常好的网站界面,用于显示各种工具的所有编译结果,甚至可以显示从一个构建到下一个构建的代码更改。它还跟踪构建历史记录中的所有构建。我期待着测试驱动的开发,并认为这种类型的方法与nUnit / nCover相结合应该给我们一个很好的想法,然后我们推出我们没有破坏任何东西的变化。一旦我们在项目中足够远,还计划加入某种类型的自动用户界面测试。根据工具的不同,这应该只是在构建服务器上安装该工具并从Cruise Control调用它。甜。

良好的CI流程将具有完整或接近完整的单元测试覆盖率。单元测试测试类和方法,以及集成测试,测试系统的多个部分。设置CI构建时,让它们自动化单元测试。这样,CI构建可以每天运行多次。我们的设置每2小时运行一次。

您可以拥有每天运行一次的更长时间的运行版本。这些可以使用其他服务并运行集成测试。

我正在观看ThoughtWorks演示文稿(Cruise Control的创建者),他们实际上解决了这个问题。他们的答案是,没有部署太复杂,无法测试。为什么?因为否则,您的客户将成为您的测试人员,这正是您不希望的地方。

如果您具有复杂的部署结构,请设置可视化服务器。它假装是您需要与之交谈的所有系统。它们总是可以以已知良好状态启动,因为您可以重置为干净的图像。

要回答您的初始问题,一个好的流程可以实现存储库和开发人员之间的通信。如果存储库处于错误状态(非编译代码,测试失败等),开发人员会尽快知道它,以便他们能够纠正它。

后来发现了一个错误,它的修复成本更高。所以应该尽早发现错误。这是CI背后的动机。

良好的CI应该确保捕获尽可能多的错误。整个应用程序包含代码(通常是多种语言),数据库模式,部署文件等。其中任何一个错误都可能导致错误 - 因此CI应尽可能多地运用它们。

CI不会取代适当的QA规则。此外,CI在项目的第一天不需要非常全面。可以从简单的CI过程开始,该过程执行基本编译和最初进行单元测试当您在QA中发现更多类别的错误时,您应该调整CI过程以尝试捕获这些错误的未来发生。它还可以涉及静态代码分析检查,以便您可以在代码库中实现一致的编码和设计理念。

  
    

当它自动化到QA和手册时,一个好的CI构建过程是否足够好?

  

我认为,那个“手册”部署工程师角色的人担心部署后出现问题时会使用部署。他对部署工具的可靠性和稳定性没有信心。

这个专长可以在类似prod的环境中进行自动部署过程测试。它还必须在部署后测试回滚机制。

当对此功能进行足够的测试时,您将对使用此过程和工具充满信心。

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