版本管理
版本管理是指软件项目中版本周期的管理,版本周期是指软件工程师提供一组唯一标识的文件供其他人使用。其他人可能是他们工作中的部门、大学里的同学或全世界。这组文件(可能是一个文件)构成了软件版本。管理版本意味着版本管理者知道
- 它包含了什么
- 它去了哪里
- 为什么它去那里
- 如何处理报告的错误
构建软件是应用于将源代码编译或聚合为可使用工具或应用程序的通用术语。源代码不需要以传统意义上的方式进行编译(构建),传统意义上的编译依赖于编译器将文件链接在一起;现代系统可能完全由解释的源代码文件组成(例如,Perl 或 PHP 的源代码文件)。不过,将所有内容组合在一起,使其成为可使用格式,仍可以被认为是“构建”。
软件项目越大越复杂,对极其完善的构建和发布功能的需求就越大。
构建和发布过程具有几个特征。最常见的是使用隔夜构建、规范化的构建编号、高度自动化、调度和重用、使用通知、元数据捕获和存储,以及项目门户或查看器的实现。
隔夜构建
[edit | edit source]这是一个基本功能,它实现两个主要目标
- 它建立了项目的代码集成。
- 它立即提醒您代码集成出现问题。
这些听起来像是同一件事,但实际上并非如此。软件工程师期望随着项目的成熟看到代码集成;隔夜构建确认了这一点。他们不希望看到代码集成出现问题(“昨天构建成功,但今天失败”问题),因此他们希望在遇到问题时立即知道。工程师应该是唯一看到合法代码集成问题的人。他们应该在进行单元测试时发现并解决问题,然后再提交到项目中。通过运行隔夜构建,工程师最多只有 24 小时的源代码更改需要审查和/或回退,如果构建出现问题。
隔夜构建还为 QA 部门提供了执行测试用例和针对特定错误回归的目标。隔夜构建通过减少解决实际代码集成问题所需的时间来帮助软件项目团队按时完成任务。
有效的构建编号
[edit | edit source]当团队每天晚上(或持续)构建项目时,就需要构建编号方案以及构建发布规则。构建发布规则是指哪些构建发布到 QA 用于消费,以及该发布的目标。在特定机器上的特殊目录结构足以满足此目的。项目团队成员在项目开始之前就确定了这一点,开始使用它,并在项目的整个过程中不进行更改。在整个项目周期中,任何相关方都可以快速查看任何构建。编号方案必须足够灵活,以便在编号本身中提供特定的、内置的含义。例如
foobar20110
此构建“编号”允许可视化识别其内容。项目中的任何人都可以查看此编号,并知道构建包含
- Foobar
- 版本 2 源代码
- 内部构建编号 110
版本管理者和构建工程师必须建立一个可以通过自动构建脚本轻松递增的编号方案。
自动化
[edit | edit source]人为错误对于诸如编写电子邮件之类的琐碎的一次性操作来说是可以接受的风险。但对于构建和发布软件来说,人为错误是不可接受的风险。如果该程序的步骤可以输入到键盘中,那么该程序很可能可以实现自动化。设计良好的自动化模块可以在项目中的其他地方以及其他独立项目中重复使用。
自动生成的构建编号
[edit | edit source]在源代码中嵌入构建编号是一种常见做法。这允许软件应用程序的用户打开“关于”或“版本”屏幕,并接收有关应用程序版本和构建编号的信息。这在支持和升级情况下很有用。用户会看到类似于“版本 12.3 构建 1234”的内容。这些字符串来自源代码,通常是在构建之前进行手动编辑得到的。该过程——生成构建编号并将其插入源代码——可以实现自动化。版本工程师必须开发一个脚本或其他自动化代码,该代码读取主构建编号文件,递增并缓存它,打开包含构建和版本字符串的源代码文件,对文件中的字符串进行 grep 或搜索,进行替换,关闭文件,提交并标记它。现在,构建编号已在构建过程之前放入源代码中。
调度
[edit | edit source]运行良好的版本管理类似于软件开发项目的其他方面,因为它高度依赖于已安排任务的完成情况。构建是产生版本管理过程工件的最重要的一项已安排任务。版本管理者必须确保构建时间表是可以预测的并且得到维护。实现这一目标的一种机制是使用 cron 或 at 等作业调度器。这使版本管理者能够建立一个用于构建、发布和部署的自动执行的时间表。
重用
[edit | edit source]重复使用自动化模块使版本管理者能够将更多活动压缩到可用时间内,从而提高生产力,而无需相应地增加动手工作量。可以在项目内部和项目之间重复使用的自动化模块示例包括用于电子邮件通知、源代码检出和检入、文件复制以及部署的那些模块。
通知
[edit | edit source]对于版本工程师来说,能够收到任何给定版本或构建过程成功或失败的通知是有利的。版本过程中的自动通知提供了这一点。在构建结束时,可以向项目团队发送一个简单的“构建正常”消息。该消息可能包含指向包含详细信息的日志文件的超链接,团队可以从快速接收状态中获益。类似地,当构建出现问题时,通知会立即以“构建失败”消息提醒团队,以便进行调查。
项目门户
[edit | edit source]网络服务器易于部署,并已成为构建和发布元数据展示管理器的流行工具。项目成员和其他相关人员可以通过网页浏览器查看页面,以获取适合其目的的项目状态详细信息。有几种成熟的工具可以用于此目的,包括 Anthill、CruiseControl 和 BuildMaster。
构建和发布软件会产生大量的元数据,其数量和重要性都非常大。发布经理对以下方面感兴趣:
- 构建和发布趋势,这些趋势可以帮助洞察如何改进未来的发布周期。
- 审计日志,这些日志提供特定软件更改迁移的历史记录。
构建元数据的示例包括:
- 构建编号
- 构建日期
- 构建版本
- 使用的源代码标签
- 隔夜构建 (Y/N)
- QA 测试 (Y/N)
- QA 测试结果 (通过/失败)
- 完整日志的位置
发布经理可以使用任何关系型数据库管理系统 (RDBMS);有几种 RDBMS 是免费提供的,可以快速设置在运行任何免费操作系统的低成本计算机上。可以导入现有的构建日志以用于历史数据存储。构建元数据可能因项目而异,一般认为存储的元数据量存在实际限制。例如,即使发布经理可能捕获并存储诸如“构建中包含的二进制文件数量”等数据,也必须考虑这些数据是否有意义。仅仅因为数据可用,并不意味着它自动就成为信息。