JavaScript多模块项目–持续集成

JavaScript多模块项目

几天前,我与Grunt撰写了有关JavaScript多模块项目的博客文章。 这种方法使您可以将应用程序拆分为多个模块。 但是同时,它允许您从这些模块中创建一个部署。 它受Maven多模块概念的启发(Maven是Java世界的构建系统)。

但是项目的配置只是难题的一半。 测试对我来说是必须的。 并且必须执行测试。 执行必须是自动的。 因此,我需要为该项目配置找出持续集成的故事。

要考虑的项目参数

让我快速总结一下项目配置的基本属性:

选择CI服务器

首先,我必须选择CI服务器 。 显然,它必须支持构建链(一个构建将能够启动另一个构建)。 我有Java背景并且对Jenkins有经验。 因此,这将是自然的选择。 我敢打赌,詹金斯可以很轻松地处理它。 但是我想尝试使工作流程更接近大多数JavaScript社区。 所以我尝试了TravisCI 。 直截了当不合适,因为不可能链接构建

接下来,我尝试了drone.io 。 相对较新的服务。 最初似乎不是很广泛。 但是仔细观察实际上表明这是正确的选择。 它为我提供了以下必要功能:

  • 带有预安装的Node.JS的临时Docker Linux实例(在构建后被删除)
  • Web挂钩,用于远程触发构建
  • 用于指定Bash构建命令的Web界面
  • Web界面,用于指定构建期间所需的私钥或凭据

功能的组合变得非常强大。 几乎没有未解决的问题(例如,构建过程的可视化使Firefox无法响应,缺少跟踪构建进度的选项-因此需要手动滚动),但是我可以接受这些问题。

我还能够从drone.ioSauce Labs执行量角器测试,并测量代码覆盖率。 测量量角器测试代码覆盖率在单独的博客中描述 。 对子项目的任何更改都会触发主项目的构建。 听起来有趣吗? 让我详细描述此CI配置。

文献资料

我不会深入探讨drone.io,调味汁实验室或量角器的基本用法。 他们对我来说是新手,我轻松快捷地查看了他们的文档。 这是我用来组合此CI配置的文档列表。

量角器– Souce Labs集成

此设置的重要部分是ProtractorSauce Labs的集成。 Sauce Labs为Selenium服务器提供了WebDiver API进行测试。 指定您的凭据时,量角器默认使用Sauce Labs。 因此,凭据是test / protractor / protractorConf.js (代码段的底部)中唯一的特殊配置。 其他配置来自grunt-protractor-coverage示例 。 我正在使用此grunt插件来运行量角器测试和测量代码覆盖率。

// A reference configuration file.
exports.config = {
  // ----- What tests to run -----
  //
  // Spec patterns are relative to the location of this config.
  specs: [
    'test/protractor/*Spec.js'
  ],

  // ----- Capabilities to be passed to the webdriver instance ----
  //
  // For a full list of available capabilities, see
  // https://code.google.com/p/selenium/wiki/DesiredCapabilities
  // and
  // https://code.google.com/p/selenium/source/browse/javascript/webdriver/capabilities.js
  capabilities: {
    'browserName': 'chrome'
    //  'browserName': 'firefox'
    //  'browserName': 'phantomjs'
  },
  params: {
  },
  // ----- More information for your tests ----
  //
  // A base URL for your application under test. Calls to protractor.get()
  // with relative paths will be prepended with this.
  baseUrl: 'http://localhost:3000/',


  // Options to be passed to Jasmine-node.
  jasmineNodeOpts: {
    showColors: true, // Use colors in the command line report.
    isVerbose: true, // List all tests in the console
    includeStackTrace: true,
    defaultTimeoutInterval: 90000

  },
  
  sauceUser: process.env.SAUCE_USERNAME,
  sauceKey: process.env.SAUCE_ACCESS_KEY
};

您现在可能会问,当使用远程Selenium服务器进行测试时,如何在配置中使用localhost 。 好问题。 酱实验室提供了非常有用的功能,称为酱连接 。 它是模拟从Selenium服务器对计算机的访问的隧道。 当您需要绕过公司防火墙时,这非常有用。 稍后将在主项目CI配置中使用它。

为子项目设置CI

想法是子项目中的每个更改都将触发主项目的构建。 这就是为什么我们需要从“设置”->“存储库”部分复制主项目的 构建挂钩
初级钩

通过子项目中的wget Linux命令点击Web钩子,开始了主项目。 正如您在下图中所看到的,子项目将更改通知给主项目并随后处理其自身的构建。 Drone.io不提供并发构建( 不确定这是否仅是开源项目的限制 ),因此主项目将等待子项目的构建完成。 之后,该主要项目即已建立。

主项目的CI配置首要客户

因此,主项目的构建现在从子项目中触发。 主项目配置稍微复杂一些。 我使用各种命令:

  • 首先,我们需要在“ 环境变量”部分中指定Sauce Labs凭据
export SAUCE_USERNAME=********
export SAUCE_ACCESS_KEY=****************************
  • 下载,提取并执行适用于Linux的Sauce Connect隧道。 这样可以访问构建映像上的某些端口,以进行Selenium测试。 注意,隧道的执行是通过&(&)来完成的 。 这意味着隧道执行是在分支过程中完成的,并且当前控制台可以继续执行构建。
wget https://d2nkw87yt5k0to.cloudfront.net/downloads/sc-latest-linux.tar.gz
tar -xzvf sc-latest-linux.tar.gz
cd sc-4.2-linux/bin
./sc &
cd ../..
  • 现在,将执行标准的Node.JS / Grunt构建工作流程。 下载并安装所有NPM依赖项会为Sauce Connect隧道启动提供足够的时间。
npm install phantomjs
time npm install -g protractor
time npm install -g grunt-cli bower
time npm install
grunt
  • 最后一个命令是在构建后关闭Sauce Labs隧道,以使Docker构建映像不会挂起。
kill %1


总理

这样配置的作业现在需要9分钟。 drone.io限制为15分钟。 希望我将要创建的所有端到端测试都有足够的空间。 如果您对构建输出/进度感到好奇,请查看下面的drone.io工作。

项目链接

Github仓库:

Drone.io职位:

翻译自: https://www.javacodegeeks.com/2014/06/javascript-multi-module-project-continuous-integration.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值