Django 1.6 最佳实践: Continuous Integration

在我们的博客中, 记录了我们在开发过程中所使用的技术和遇到的问题, 希望作为其他开发和设计者的一个学习交流平台.

Django 1.6 最佳实践: Continuous Integration


Continuous integration (CI) 是一种软件开发实践, 常用于团队间频繁合并工作使用. 每一次合并都要经过自动构建和测试尽快验证其正确性. 许多团队都发现这一方式能大大降低合并中出现的麻烦和, 并增强软件统一性.

以下是一个典型的开发流程:

  • 程序员写代码, 运行本地测试, 将代码推至代码库, 通常最少一天一次
  • 代码库变化触发自动构建工具
  • 自动构建工具运行构建程序. 其间发生任何错误就将本次推送驳回
  • 自动构建工具运行测试程序. 其间发生任何错误就将本次推送驳回
  • 自动构建工具将结果通知开发人员

这一过程有以下优势:

  • 能以最快速度发现bug
  • 便于发现其他问题
  • 每天合并代码的结果导致不会有一次性大规模的改变代码的情况发生
  • 利于对项目的反馈
  • 减轻许多麻烦的事物

1. Continuous Integration 的原则

接下来, 我们讨论一下Continuous Integration的原则:

大量测试

Continuous Integration的前提是构写大量的测试代码. 没有完整的测试就无法做到Continuous Integration. 有些人可能会不同意, 觉得没有测试, 照样可以完成Continuous Integration, 而且也能带给团队同样的优势: 测试开发过程是否成功, 将每个人的代码都同步. 但这一情况是建立在编译语言上的, 因为编译语言在编译时就保障了代码的正确性(不包括其功能性).

保持快速构建

随着开发时间的进行, 测试可能会变得越来越慢, 为此我们提供了一下技巧:

  • 避免使用fixture
  • 没有必要时便面使用TransactionTestCae
  • 避免构写大量setUp()代码
  • 构写小而专一的测试代码
  • 学习数据库优化

2. Continuous Integration 的工具

可以使用以下工具:

Tox

Tox是一个virtualenv管理和测试用命令行工具, 可以帮助我们使用一个简单的命令对多个Python和Django版本进行测试. 对于不同的数据库, 也应当进行测试. 这是全世界的程序员测试不同版本python兼容性的通用工具.

Jenkins

Jenkins是一个Continuous Integration的引擎, 也是一个Continuous Integration的标准.

也有许多在线工具继承了Jenkins供我们方便的使用, 有些更是可以方便的集成到类似GitHub, BitBucket等的代码管理库中, 例如Travis-CI, CircleCI和Drone.io.


原文链接: http://weiguda.com/blog/43/