我正在从头开始建立一家公司(Tomcat + Spring Rest + Java),所以我们有权做一些正确的事情(或者列出不重复我们过去的错误),这是我们想要的目标之一实现的是能力自动构建,测试(单元,集成)和部署。
我们的平台构建了一个静态HTML / JS界面站点,与NGiNX和一些API服务器(不同的应用程序)一起提供,其中一些是公开的,其中一些只能通过公开的API应用程序从服务器场内访问。
我选择TeamCity作为CI服务器,因为我对它有点熟悉,到目前为止我对Jetbrain的所有产品都有很好的体验。
到目前为止,我已经定义了两个构建配置
开发健全:从git中检出,运行DB脚本来准备数据库,执行干净安装的maven目标(因此我们的testng套件正在执行),执行代码覆盖和静态代码分析 此配置正在执行,非常棒。
集成:从git中检出,运行数据库脚本来准备数据库,执行干净安装的maven目标(所以我们的testng套件正在执行)
现在我已经到达了有问题的部分,我们的配置需要在我们的集成测试开始之前将几个.war文件部署到不同的机器上,我也希望以这样的方式构建它以便我能够添加第三个配置将在Integration通过后部署到实时生产中,因此它基本上与第二个配置相同但添加一些功能,例如关闭应用程序并在优雅部署后将其重新联机,我已经看到了几种方法这该怎么做 从maven货物,shell脚本,织物等......
是否有推荐的方法来介绍如何从您过去的经验中获取此图纸? 另外我不清楚运行集成测试的最佳方式是什么,涉及几个应用程序要部署,我已经看过许多嵌入式jetty等的例子..但这只适用于一个应用程序或非常简单的配置,当你需要时在你开始测试之前要部署3-4个应用程序,最好的方法是什么?添加另一个专门用于集成测试的项目,并在部署完成后使用特定的配置文件执行另一个maven目标?
BTW - 部署到AWS
谢谢你们。
答案 0 :(得分:4)
首先,我完全建议你阅读Continuous Delivery(Jez Humble,David Farley),它有很多关于此的信息。有sample chapter here。
自从阅读本文以来,我开始实现一个构建管道,其中每个svn的提交都经过了管道中的每个阶段,随着构建的进行,环境逐渐变得更像生产。我们使用Jenkins。
这些阶段中的每一个都充当“质量门” - 构建不允许进一步发展,直到它通过某个阈值 - 测试失败,度量%s等。某些阶段自动流动,其他阶段是手动触发的。每个环境所需的任何配置更改都是通过解压缩原始二进制文件,更改设置,再次打包来完成的 - 理想情况下,我希望将配置与应用程序二进制文件分开但尚未找到方法。
自动验收测试阶段只是更新服务器上的现有应用程序 - qa阶段完全停止,卸载,安装&开始行动。每个都运行不同的脚本 - 蚂蚁和组合的组合。蟒。
Here's jenkins中使用构建管道插件的管道是什么样的。
[编辑]
你实际上并不需要一次性实现这个阶段的每一个阶段,很容易为每个阶段都有占位符,只是在没有实际做任何事情的情况下流入下一个阶段。如果映射当前进程,您应该能够自动部分它并逐步向管道移动。
提交阶段是最容易做到的,它基本上是你在设置普通CI服务器,创建项目,将其挂钩到版本控制,编译,执行测试,从ant / maven运行一些统计数据时所做的事情任务。这需要5分多钟才能运行。
统计任务运行时间太长(> 15分钟)所以我在提交时运行一个子集,每夜运行一次,可以完成整个Findbugs,PMD,Checkstyle&的Cobertura。我宁愿在提交时运行所有这些,但这需要更多的硬件和努力建立某种构建网格。
Selenium测试目前还没有在一个单独的项目中,但它们被打包成一个单独的jar,并通过jenkins的“复制工件”插件 - 蚂蚁/ python脚本包提供给自动化验收测试阶段将WAR文件部署到容器然后解压并运行Selenium测试(通过junit)。目前只有一小部分“烟雾测试”,他们对主战没有依赖,尽管我可能会看到这种变化。我实际上并不喜欢为代码和单独设计项目的想法。测试 - 构建脚本只是打包主项目中每个模块所需的类和库 - 根据您的情况(很快,我们的)您可能需要做一些不同的事情 - 如何使用您需要的配置启动一个或多个VM并部署到那。 (关于此问题的持续交付书中的大量信息)
Jenkins通过插件支持很多这样的好事 - 我们从Atlassian Bamboo转移,因为我们想要的大部分内容都不可用,现有的插件要么不起作用,要么与Bamboo版本不兼容。我暂时没有使用Team City,所以我不知道它是否支持“管道” [aparently not]这个想法。 'Build Pipeline'插件相当新,有一些粗糙的边缘,但正在积极开发 - 我认为可以用Jenkins''升级的版本'& touchstone构建但没有尝试过。如果你有足够的资源(钱!),你可能想看看Go