软件工程/工具/构建工具简介
构建自动化是指对软件开发人员日常工作中执行的各种任务进行脚本编写或自动化,包括以下内容:
- 将计算机源代码编译成二进制代码
- 打包二进制代码
- 运行测试
- 部署到生产系统
- 创建文档和/或发行说明
从历史上看,开发人员使用构建自动化从构建脚本内部调用编译器和链接器,而不是尝试从命令行进行编译器调用。使用命令行将单个源模块传递给编译器,然后传递给链接器以创建最终可部署对象非常简单。但是,当尝试按特定顺序编译和链接多个源代码模块时,使用命令行流程不是一个合理的解决方案。make 脚本语言提供了一个更好的替代方案。它允许编写一个构建脚本,以连续调用必要的编译和链接步骤来构建软件应用程序。GNU Make [1] 还提供了其他功能,例如“makedepend”,它允许进行一些源代码依赖项管理以及增量构建处理。这是构建自动化的开始。它主要关注的是自动化对编译器和链接器的调用。随着构建过程变得更加复杂,开发人员开始在对编译器的调用周围添加预处理和后处理操作,例如从版本控制中检出到将可部署对象复制到测试位置。现在,“构建自动化”一词还包括管理预处理和后处理编译和链接活动,以及编译和链接活动。
近年来,构建管理解决方案在构建过程的自动化方面提供了更多便利。商业和开源解决方案都可以提供更多自动化的构建和工作流处理。一些解决方案专注于自动化围绕构建脚本调用进行的预处理和后处理步骤,而另一些解决方案则超越了预处理和后处理构建脚本处理,深入到简化实际编译和链接器调用,而无需太多手动脚本编写。这些工具对于持续集成构建特别有用,因为这些构建需要频繁调用编译过程,并且需要增量构建处理。
高级构建自动化为分布式构建和/或分布式处理提供远程代理处理。术语“分布式构建”是指实际对编译器和链接器的调用可以发送到多个位置,以提高构建速度。该术语经常与“分布式处理”混淆。分布式处理是指流程或工作流中的每个步骤都可以发送到不同的机器执行。例如,构建后的步骤可能需要在多台机器上执行多个测试脚本。分布式处理可以将不同的测试脚本发送到不同的机器。分布式处理不是分布式构建。分布式处理无法获取 make、ant 或 maven 脚本,将其分解并发送到不同的机器进行编译和链接。分布式构建过程必须具备机器智能,才能理解源代码依赖关系,以便将不同的编译和链接步骤发送到不同的机器。构建自动化解决方案必须能够管理这些依赖关系才能执行分布式构建。一些构建工具可以以编程方式发现这些关系(Rational ClearMake 分布式[2]、Electric Cloud ElectricAccelerator[3]),而另一些则依赖于用户配置的依赖关系(Platform LSF lsmake[4])能够整理出源代码依赖关系的构建自动化也可以配置为以并行模式运行编译和链接活动。这意味着编译器和链接器可以使用配置了多个内核的机器以多线程模式调用。
并非所有构建自动化工具都能执行分布式构建。大多数工具只提供分布式处理支持。此外,大多数支持分布式构建的解决方案只能处理 C 或 C++。支持分布式处理的构建自动化解决方案通常基于 make,并且许多解决方案不支持 Maven 或 Ant。
分布式构建解决方案的示例包括 Xoreax 的 IncrediBuild[5](适用于 Microsoft Visual Studio 平台)或开源 CMake[6]。这些解决方案可能需要对产品环境进行特定配置,才能在分布式平台上成功运行,例如库位置、环境变量等。
- 提高产品质量
- 加速编译和链接处理
- 消除冗余任务
- 最大程度减少“错误构建”
- 消除对关键人员的依赖
- 拥有构建和发布的历史记录,以便调查问题
- 节省时间和金钱 - 由于上述原因。[7]
- 按需自动化,例如用户在命令行运行脚本
- 计划自动化,例如持续集成服务器运行夜间构建
- 触发自动化,例如持续集成服务器在每次提交到版本控制系统时运行构建。
构建自动化的一种特定形式是自动生成 Makefile。这可以通过以下工具实现:
- GNU Automake
- CMake
- imake
- qmake
- nmake
- wmake
- Apache Ant
- Apache Maven
- OpenMake Meister
基本要求
可选要求:[11]
- 生成发行说明和其他文档,例如帮助页面
- 构建状态报告
- 测试通过或失败报告
- 每个新构建中添加、修改或删除的功能摘要
- ↑ http://www.gnu.org/software/make/
- ↑ Dr. Dobb's Distributed Loadbuilds,检索于 2009-04-13
- ↑ Dr. Dobb's Take My Build, Please
- ↑ LSF User's Guide - Using lsmake,检索于 2009-04-13
- ↑ Distributed Visual Studio Builds,检索于 2009-04-08
- ↑ CMake - Cross platform make,检索于 2010-03-27
- ↑ http://www.denverjug.org/meetings/files/200410_automation.pdf
- ↑ http://freshmeat.net/articles/view/392/
- ↑ http://www.ibm.com/developerworks/java/library/j-junitmail/
- ↑ http://buildbot.net/trac
- ↑ http://www.cmcrossroads.com/content/view/12525/120/
- 注释
- Mike Clark: Pragmatic Project Automation, The Pragmatic Programmers ISBN 0-9745140-3-9