您的位置:首页 > 数据库

关于自动编译的一点经验

2008-12-27 20:57 197 查看
我关于自动编译的一点经验
一个项目想要成功,那配置管理的努力是必不可少的。如何做一个好的配置管理,同时减轻自己的负担,那就是一个值得认真思考的问题拉。
一个产品想要实现持续集成及日创建,那么非得有一套好的自动编译系统支撑才可以,否则对于一个庞大的系统而言,一个配置管理就算累死也无法满足需求的。
下面以我的经验说说任何构建一个自动编译系统。 为了更好的自动编译,我想应该建立一个这样的系统,那就是:
1、开发人员或定时触发。
2、自动更新编译环境。
3、自动编译。
4、自动分析编译结果。
5、自动通知开发、测试及配置管理员。 下面我假设情况如下:
1、操作系统:平台包括:HP-UX、SunOS、AIX、Linux 、Windows (均包括多个版本)、。
2、数据库包括:oracle 8i、9i、10G
3、编译器包括:aCC、CC、xlC、gcc、bcb(windows 上的集成开发环境) 、java(包括多个版本)
4、项目规模超过千万行代码、模块众多、调用复杂。
那么在这样一个情况下,如果我们考虑用一般的商用工具做,显然成本是很高的。
对于这样一个庞大,复杂的系统,我想在项目启动后,首先要做的是:
1、定义编码规范。
2、定义C++及java的编译选项(由于C++语言中编译器及平台版本不同,32、64位要求及数据库的版本等不同要求,所以编译选项显然要提取出来单独处理)。
3、定义Makefile 规范。
4、定义模块目录结构。
5、定义接口提供方式。
在定义以上内容的时候,一定要遵循一个原则,符合命名规范、尽量可配置、易懂、易于理解。最后组合出的编译命令的字符串不要太长(unix操作系统下,不同版本的shell 对一个命令的长度有不同要求、同时由于Makefile中如果有很多shell 脚本的话,编译性能也会受影响)。
在我用过的系统中,make 工具,unix 平台我们使用的是 GNU make 版本3.80,java 用的是 ant,windows 平台C++用的是bcb 自带的make,不过在编译前先要将bcb的工程文件bpr文件转换为Makefile文件,使用的工具是bpr2make(之所以不用bcb直接编译,主要是为拉自动编译,自动分发编译结果)。 为了更好的跟踪代码及需求、bug变更情况,自动编译系统,应该从开发人员提交代码开始,到发布结束。
流程如下:
1、开发人员提交代码。
2、编译脚本触发,从版本库更新代码到编译服务器。
3、设置编译需要的环境变量。
4、构造编译需要的Makefile。
5、执行编译。
6、分析编译结果、记录编译结果。
7、发邮件通知开发、配置管理、测试人员等相关人。
8、更新到测试环境测试。
9、配置管理员发布。 下面我以cvs或svn为源码版本库做作说明,需要写一些适当的脚本,并且需要数据库的配合才能工作的比较顺利。
1、建议用户表
2、在数据库中建立产品表。
3、在数据库中建立模块表(需要记录模块优先级、模块路径、Makefile 文件的名称等功能)。
4、建立需求表、任务单表、bug表、编译记录表。
5、编写代码提交脚本。实现提交代码的同时,在编译记录表中增加记录,并关联需求单、任务单、BUG单功能。
6、编写自动编译脚本。实现定时查询数据库,根据编译单,进行编译的功能。需要实现,获取编译单后,自动生成编译环境所需的环境变量,构造编译用Makefile,更新待编译代码,编译完成后分析编译结果,给被编译代码打tag,获取编译结果的特征串,然后记录到数据库中,并发邮件通知开发人员、测试人员及配置管理人员。 如果以上脚本实现,那么,不管你是要日创建还是随时编译,还是全系统编译,都是轻松的事情拉。
虽然windows 平台和unix 平台差别很大,c++和java的差异也很大,但是如果大家将以上要求都用函数实现。我想迁移还是很方便的。
尤其是脚本语言,多数是支持跨平台的。
这里主要可能碰到的问题是。
1、模块结构规划不合理。
2、公共调用文件的安装问题。
3、模块编译顺序的问题。对于复杂的系统,那么调用关系就决定了编译顺序,可能要多次调整。
4、编译结果的安装问题。最好是编译完成通知测试人员,让他们自己安装。否则你自动杀掉他们正在测试的进程,他们会找你算账的。
5、编译结果的分析问题。编译结果的分析就需要自己写正则表达式来分析日志了,级联编译中是无法通过失败信号获取编译失败的,只能分析日志。
6、邮件发送问题。unix 平台,配置好DNS和sendmail就好啦,windows平台,如果没有找到你所用脚本语言的邮件发送函数,那么你就的自己用telnet 加 smtp 协议实现拉。 可能有人奇怪我为什么要设计一个数据出来,我想如果有数据库的话,方便维护人员根据编译目标文件的特征串,查找出,这是那一次编译的,生成他的源码有那些,具体版本是什么。
同时也可以查找出是为那个需求或BUG而修改代码的,修改了那些地方等。同时也可以通过数据库统计,分析出,模块代码的变更情况和工作量,进度等。
同时也可以分析出那些人老是提交错,经常容易犯那些错误,编译流程改进,作为cmmi 5级的数据提供。

     
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息