持续集成

概述

学习时间: 10 min
练习时间: 0 min
问题
  • 如何在更多的平台上自动运行测试?

目标
  • 了解持续集成如何加速软件开发

  • 了解持续集成的好处

  • 实施持续集成服务器

  • 确定一些托管持续集成服务器的选项

为了使运行测试尽可能简单,许多软件开发团队实施了一种称为持续集成的策略。顾名思义,持续集成将测试套件集成到开发过程中。每次对存储库进行更改时,持续集成系统都会构建并检查该代码。

实验:您的软件可以在您同事的计算机上运行吗?

想象一下,您在MacOSX计算机上开发软件。上周,你帮助你的办公室同事在他们的Linux计算机上构建和运行它。从那以后,你做了一些改变。

  1. 如果他们在假期回来时更新他们的存储库,你怎么能确定它仍然可以工作?
  2. 这个过程需要多长时间?

研究实验室的典型故事是,你不知道它是否能在你同事的机器上工作,直到你尝试在他们的机器上重建它。如果您有构建系统,则可能需要几分钟来更新存储库、重新构建代码并运行测试。如果您没有构建系统,可能需要整个下午才能查看您的新更改是否兼容。

让计算机完成工作

科学家擅长创造性洞察、概念理解、批判性分析和消费浓缩咖啡。计算机擅长遵循指令。如果科学家们可以给计算机指令并去拿一杯浓缩咖啡,科学会更有趣。

持续集成服务器允许这样做。根据您的指示,持续集成服务器可以:

  • 从存储库中签出新代码
  • 启动受支持操作系统的实例(即各种版本的 OSX、Linux、Windows 等)。
  • 使用不同的软件版本(即 python 2.7 和 python 3.0)启动这些实例
  • 运行构建和测试脚本
  • 检查错误
  • 并报告结果。

由于服务器执行的第一步是从存储库中签出代码,因此我们需要将代码放到网上以使用这种服务器(除非我们能够/愿意建立自己的CI服务器)。

在GitHub上设置Git存储库

您的mean.pytest_mean.py文件可以是 GitHub 上存储库的内容。

  1. 去GitHub并创建一个存储库 称为mean。
  2. 克隆那个仓库(git clone https://github.com:yourusername/mean)
  3. mean.pytest_mean.py 文件复制到存储库目录中。
  4. 使用git addcommitpush这两个文件到GitHub。

指导

你在mean函数上的工作既有代码也有测试。让我们将该代码复制到它自己的存储库中,并将持续集成添加到该存储库中。

需要什么

它不需要构建系统,因为Python不需要编译。

  1. 它需要什么?
  2. 在名为 requirements.txt 的文件中写入软件依赖项的名称并保存该文件。
  3. 事实上,你为什么不继续进行版本控制呢?

Travis-CI

Travis 是一个持续集成的服务器托管平台。它通常用于Ruby开发圈以及科学Python社区。

要使用Travis,您只需要一个帐户。它是免费的,因此您小组中的某个人应该注册一个Travis帐户。 然后按照Travis网站上的说明将您的Travis帐户与 GitHub连接。

存储库中名为.travis.yml的文件将向Travis发出信号,表明您要在 Travis-CI 上构建和测试此存储库。 对于我们的目的,这样的文件非常简单:

language: python
python:
  - "2.6"
  - "2.7"
  - "3.2"
  - "3.3"
  - "3.4"
  - "nightly"
# command to install dependencies
install:
  - "pip install -r requirements.txt"
# command to run tests
script: pytest

yml文件语法

.travis.yml 文件的确切语法非常重要。确保使用空格(不是制表符)。https://lint.travis-ci.org/ 可用于检查印刷错误。

您可以看到python包管理器pip将如何使用上一个练习中的requirements.txt 文件。 该requirements.txt文件是列出我们需要的所有python包的常规方式。 如果我们需要 pytest、numpy 和 pymol,requirements.txt 文件将如下所示:

numpy
pymol
pytest

最后步骤

  1. 将.travis.yml添加到您的存储库
  2. 提交并推送。
  3. 检查你的服务器的情况

持续集成托管

我们举了Travis的例子,因为它很容易启动。虽然它能够运行多种版本的Linux,但它目前也不支持其他平台。根据您的需要,您可以考虑其他服务,例如:

关键点

  • 存在用于自动运行测试的服务器

  • 运行测试可以由GitHub拉取请求触发

  • CI允许跨平台构建测试

  • .travis.yml文件在 travis-ci 服务器上配置构建

  • 许多免费的CI服务器可用