持续集成建议?

5
我正在为我的Rails应用程序设置持续集成服务器(使用Integrity),希望能得到一些建议:
  • 大多数人是将CI设置为在每次推送到中央SCM存储库时构建和测试其应用程序,还是只在推送到staging分支时才构建和测试?
  • 我将使用CI服务器自动运行flay、flog、reek和rcov--是否还有其他测试或代码覆盖工具需要运行?
  • 我计划在Slicehost上部署我的应用程序。我应该在一个单独的Slicehost slice上设置CI服务器,该slice与我的生产slice(关于已安装的gems、库等)相同吗?
  • 如果我确实为CI使用单独的切片,那么在将CI切片用于分段服务器时是否会有任何问题?
此致,
Jacob
5个回答

2
大多数人在每次将代码推送到中央源码管理仓库时都会设置CI来构建和测试他们的应用,或者仅在推送到staging分支时才这样做。这取决于团队大小和项目的速度。有更多人在进行代码的不同分支上工作,我希望CI运行的频率更高、更活跃。我建议您尽可能多地使用CI,并根据需要逐渐减少它。
我将使用CI服务器自动运行flay、flog、reek和rcov,是否还有其他测试或覆盖率工具需要运行?metric-fu覆盖的一切都是一个很好的开始。如果您的团队有技术作家和/或文档是交付的一部分,则可以在其中加入rdoc。
我计划在Slicehost上部署我的应用程序。我应该在单独的Slicehost slice上设置CI服务器,该片段与我的生产片段(关于已安装的gem、库等)完全相同吗?如果你能负担得起,那就是的。通常,小型团队和新兴企业无法为每个任务提供专用服务器,但我非常支持隔离。关于相同的设置,尽可能使用vendor;设置新服务器应该快速、简单且自动化。
如果我确实为CI使用单独的片段,那么在将CI片段用作staging服务器时是否有任何危害?唯一的危害是共享资源之间的交叉污染,例如gem版本、数据库资源等。如果您循序渐进,可能会没问题,但如果您能负担得起每个环境的单独服务器,我倾向于更安全而不是遗憾。

1

我们使用Rackspace进行部署和测试。对于开发,我们有三个切片,排列如下:

开发

托管mercurial存储库,由开发人员持续更新(通常只是将分支合并到主分支)。不会在签入时触发测试,但会按小时计划运行测试。该服务器安装了MySQL并设置了一个测试数据库。

测试

托管mercurial存储库,仅由开发经理更新。用于验收测试,同时还有每晚的测试运行。该服务器安装了MyDQL并设置了一个测试数据库。

发布

在成功进行质量保证后,我们将更新从测试服务器推送至发布服务器。可以将此服务器视为“setup.exe” - 客户端切片应该可以从备份镜像顺利初始化。在此片上的测试实际上主要围绕着确保可以发生这种情况。



新客户设置

Rackspace允许您复制服务器,因此我们可以回到系统的几个版本。

当需要设置新客户时,我们从最新版本的Deploy初始化他们的新切片,添加HTTPS证书并在DNS中注册新切片。

我们还将像/etc/nginx/nginx.conf和/etc/mongrel_cluster这样的内容存储在版本控制下。

Chris


0

看起来你可能想要使用CI服务器来实现两个目的:

1)持续集成 - 这可能是推送到中央SCM存储库的部分。使用CI工具验证开发人员集成其工作的区域是否正常运行。这将为开发团队提供快速反馈。您应该尽可能快地运行尽可能多的测试。

2)构建管理 - 针对您的暂存分支,可能会进行构建,以便更严格地测试和管理进一步的部署。在这里,我会运行您设置的所有测试(以及其他帖子建议),并可能仔细跟踪这些构建。

如果准确无误,我肯定会从两个分支开始构建,但您收集测试的方式以及如何维护每个分支的构建结果可能会有所不同。另一方面,如果您能够保持主干相当干净,那么单独的暂存分支对您有什么好处呢?


0

测试和代码覆盖工具 - 您希望在套件中包含尽可能多的工具,而不会拖慢构建周期。例如,如果您添加了太多工具,导致构建时间超过几分钟,那么每次提交后继续构建就没有生产力。

在我看来,对于您的中央和分段位置,每次提交后都要进行构建。这样可能会重复覆盖,但如果您有带宽和CPU,为什么不呢?

我同意使用双切片设置,其中一个原因是它允许您将第二个切片用作分段/最终测试区域。此外,如果您从分段切片部署到生产切片,则可以利用它们之间传输信息时的本地网络优势。以这种方式做事情更快。

希望这有所帮助 :-)


0
如果您有一个更正式的发布流程,并且有一个无法像开发人员一样快速测试的独立测试团队,那么您可以设置两个构建。 (1) 一个非常快速、轻量级的过程,没有永久性的工件或存储,在每次完成后覆盖上一个构建。这些内部构建不受发布经理的控制,只是决定何时进行第二种类型的构建(2),这是一个不太频繁的构建,运行所有测试(包括手动测试),创建完整的工件,并存储元数据以编号和重现构建。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接