Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Continuous integration 如何接近CI_Continuous Integration_Amazon Web Services_Integration Testing - Fatal编程技术网

Continuous integration 如何接近CI

Continuous integration 如何接近CI,continuous-integration,amazon-web-services,integration-testing,Continuous Integration,Amazon Web Services,Integration Testing,我正在从零开始建立一家公司(Tomcat+Spring Rest+Java),因此我们有足够的时间做一些正确的事情(或者在列表中不要重复我们过去的错误),我们想要实现的目标之一是能够自动构建、测试(单元、集成)和部署 我们的平台是由一个静态HTML/JS接口站点和几个API服务器(不同的应用程序)构建的,其中一些是公开的,一些只能通过公开的API应用程序从服务器场内部访问 我选择TeamCity作为CI服务器,因为我对它有点熟悉,而且到目前为止,我对Jetbrain的所有产品都有很好的体验 到目

我正在从零开始建立一家公司(Tomcat+Spring Rest+Java),因此我们有足够的时间做一些正确的事情(或者在列表中不要重复我们过去的错误),我们想要实现的目标之一是能够自动构建、测试(单元、集成)和部署

我们的平台是由一个静态HTML/JS接口站点和几个API服务器(不同的应用程序)构建的,其中一些是公开的,一些只能通过公开的API应用程序从服务器场内部访问

我选择TeamCity作为CI服务器,因为我对它有点熟悉,而且到目前为止,我对Jetbrain的所有产品都有很好的体验

到目前为止,我已经定义了两种构建配置

  • 开发健全性:从git签出,运行DB脚本来准备数据库,执行clean install的maven目标(因此我们的testng套件正在执行),执行代码覆盖率和静态代码分析 此配置正在执行,非常棒

  • 集成:从git签出,运行DB脚本来准备数据库,执行clean install的maven目标(因此我们的testng套件正在执行)

  • 现在我已经谈到了有问题的部分,我们的配置需要将几个.war文件部署到不同的机器上,然后才能开始集成测试,此外,我希望以这样一种方式构建它,即我将能够添加第三种配置,在集成完成后将部署到实时生产中,因此它的功能基本上与第二种配置相同,但添加了一些功能,例如在优雅地部署应用程序后将其关闭并重新联机,我已经看到了几种方法如何做到这一点 来自maven cargo、shell脚本、fabric等

    根据你过去的经验,有没有一种推荐的方法来画这幅画? 另外,我不清楚运行涉及多个要部署的应用程序的集成测试的最佳方式是什么,我看到了许多嵌入式jetty等的示例。。但这只适用于一个应用程序或一个非常简单的配置,当您需要在开始测试之前部署3-4个应用程序时,最好的方法是什么?添加另一个专门用于集成测试的项目,并在部署完成后使用特定概要文件执行另一个maven目标

    顺便说一句-部署到AWS


    谢谢各位

    首先,我完全推荐您阅读持续交付(Jez Humble,David Farley),它有大量关于这方面的信息。有一个

    自从读了这篇文章之后,我开始实现一个构建管道,其中每个对svn的承诺都会经历管道中的每个阶段,随着构建的进行,环境逐渐变得更像生产环境。我们用詹金斯来做这个

  • 提交阶段-开发健全性-编译、单元测试和一些度量。这 初始阶段还构建其余部分所需的二进制文件 管道
  • 集成阶段-此阶段采用与集成阶段相同的文件 上一阶段(不是新签出),并在中运行db集成测试 记忆
  • 自动验收测试阶段-从 提交阶段并部署到运行selenium测试的服务器
  • QA阶段-这是由QA部署的,QA只需单击按钮即可拉动 不管他们想要什么构建,它也只是部署二进制文件 从提交阶段到QA服务器
  • UAT-与QA相同,但更像生产环境,我们还进行性能测试
  • 生产-从提交阶段获取二进制文件并部署到生产
  • 这些阶段中的每一个都起到“质量门”的作用-在通过某些阈值之前,不允许构建进一步进行-测试失败、度量%s等。某些阶段自动流动,其他阶段手动触发。每个环境所需的任何配置更改都是通过解包原始二进制文件、更改设置、重新打包来完成的——理想情况下,我希望将配置与应用程序二进制文件分开,但还没有找到实现这一点的方法

    自动验收测试阶段只更新服务器上的现有应用程序-qa阶段执行完全停止、卸载、安装和启动操作。每个脚本都运行不同的脚本—ant和python的组合

    使用build pipeline插件的jenkins中的管道是什么样子的

    [编辑]

    实际上,你不必一次完成这个过程的每个阶段,每个阶段都有占位符是很容易的,这些占位符只会流到下一个阶段,而实际上什么都不做。如果您映射当前流程,您应该能够自动化部分流程,并逐步实现管道化

    提交阶段是最容易做到的,它基本上就是您在设置普通CI服务器、创建项目、将其挂接到版本控制、编译、执行测试、运行一些统计数据时所做的工作,所有这些都来自ant/maven任务。这需要5分钟多一点的时间来运行

    stats任务运行时间太长(>15分钟),因此我在提交时运行了一个子集,并每夜运行一次,完成所有的Findbugs、PMD、Checkstyle和Cobertura。我更愿意在提交时运行所有这些,但这需要更多的硬件和工作来建立某种构建网格

    Selenium测试目前不在一个单独的项目中,但它们被打包为一个单独的jar,并通过jenkins的“复制工件”插件(ant/python脚本打包WAR文件并部署到一个容器中,然后ant解包并运行Selenium测试(通过junit)提供给自动验收测试阶段。目前只有大量的“烟雾测试”,它们与主要战争无关,尽管我可能看到这种变化。实际上,我不喜欢为代码和测试单独设置项目的想法——构建脚本只是打包CLA