实习番外篇:解决C语言使用Makefile无法实现更好的持续集成问题
工作中遇见的一个问题,提供项目源代码的情况下,希望对项目进行持续集成,达到一个C项目增量编译的效果。原本第一天是想通过模拟Makefile执行步骤来实现整个过程的,但是事实上发现整个Makefile显得无规律可寻,并且分布于项目的每个文件夹中,无法做到很好的控制。经过一段时间的讨论想出一个好办法,即将编译前的项目和编译后的项目进行对比,将项目中的编译过程中增加、删除和修改的文件进行记录,之后再根据实际情况对项目进行整体打包,这个便是整个过程中的总体思路。
我的工作步骤为:在项目执行之前对项目中的所有文件——从项目的根路径出发进行记录放在一个text1.txt文件中,而后项目执行完之后再次使用该方法将项目中所有文件记录于text2.txt之中。text1.txt与text2.txt两个文件记录的是项目中所有文件的绝对路径和文件内容的MD5值(MD5值后期优化思路:将绝对路径也放入文件内容之中,这样子相同内容的文件其MD5值也会不相同,更好的应用项目)。通过比对两个文件中的信息可以得出Makefile执行前后文件的增加、删除与修改情况,比对方法如下:
text1中有多行项目文件信息,第一列为项目中所有文件的绝对路径,第二列为相对应的文件MD5值;text2同理。 增加文件:当text2中出现了text1中所没有的文件时(仅仅通过比对增加的绝对路径就ok),那么我们认为该文件为执行Makefile后增加的文件,并将其记录于增加文件的记录之中; 删除文件:与增加文件恰好相反,当text1中出现了text2中没有的文件时(仅仅通过比对增加的绝对路径就ok),那么我们认为该文件为执行Makefile后删除的文件,并将其记录于删除文件的记录之中; 修改文件:修改文件是当text2中出现的路径如果在text1中也存在,如果二者的文件MD5值是相同的,我们认为是同一个文件,该文件是没有变化的;如果二者的文件MD5值是不同的,我们认为不是同一文件,即是修改文件。
因为项目最后的要求是将编译过程中的文件进行增量打包,所以我们要将增加文件和修改文件按照对应项目的相对路径放置于项目的文件夹中,我们可以直接按照记录进行操作即可。最后上传该打包文件时,增加部分的文件可以正常上传,修改文件本系统中是能够直接进行替换(如果无法替换就按照修改文件的路径先将所有修改文件删除,而后再统一上传即可)。对于上传文件初步的设想是读出路径并直接在云端执行shell脚本进行删除。
以上即为项目的总体思路,上述过程均通过python脚本实现。python脚本的调用及替换等操作为已有系统使用shell脚本进行调用,剩余部分工作为我的同事进行协作完成。
以上思想在具体执行过程中还遇见项目具体问题,部分已经解决,部分因为时间原因暂时使用硬编码的方式解决,二期项目将会通过配置文件的方式来解决;
问题一:项目执行过程中仅仅要求记录制定文件目录下的文件变化,对于剩余部分文件目录变化不关心
我们在得到增加和修改的文件路径信息之后,首先对其进行一个预处理。通过硬编码的方式将我们所需的路径筛选出来,而后再按照我们要求的步骤进行处理。 后期的优化方案为:通过类似于搜索引擎的Robots.txt协议的方式,将需要的目录和不需要的目录标明,同时选择默认目录的处理方法,最后通过Python脚本的逻辑实现来完成文件筛选操作
问题二:开发环境,测试环境及生产环境的环境变量配置是不同的,每次都需要单独上传,这个应该如何处理?
对于这部分要求,他们环境变量编译前后是不会发生变化的。我们需要在整个项目将增量取出后,再单独处理这部分文件,将其放置于文件夹之中。
实习番外篇:解决C语言使用Makefile无法实现更好的持续集成问题的更多相关文章
- (八)羽夏看C语言——C番外篇
写在前面 此系列是本人一个字一个字码出来的,包括示例和实验截图.本人非计算机专业,可能对本教程涉及的事物没有了解的足够深入,如有错误,欢迎批评指正. 如有好的建议,欢迎反馈.码字不易,如果本篇文章 ...
- (九)羽夏看C语言——C++番外篇
写在前面 此系列是本人一个字一个字码出来的,包括示例和实验截图.本人非计算机专业,可能对本教程涉及的事物没有了解的足够深入,如有错误,欢迎批评指正. 如有好的建议,欢迎反馈.码字不易,如果本篇文章 ...
- 【番外篇】ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- 给深度学习入门者的Python快速教程 - 番外篇之Python-OpenCV
这次博客园的排版彻底残了..高清版请移步: https://zhuanlan.zhihu.com/p/24425116 本篇是前面两篇教程: 给深度学习入门者的Python快速教程 - 基础篇 给深度 ...
- 可视化(番外篇)——在Eclipse RCP中玩转OpenGL
最近在看有关Eclipse RCP方面的东西,鉴于Gephi是使用opengl作为绘图引擎,所以,萌生了在Eclipse RCP下添加画布,使用opengl绘图的想法,网上有博文详细介绍这方面的内容, ...
- 番外篇 之 C#委托
对于上一节 番外篇之C#多线程的反思 反思一: Thread th = new Thread(参数); ////参数的总结 ////首先,第一情况,对于 Thread th = new Threa ...
- [置顶] think in java interview番外篇-谈程序员如何修练英语
一.程序员对英语能力的重视度和能力要求应该是在各行各业中排在比较靠前的 这样说吧,英语程度的好坏直接影响着一个程序员的编程.开发.创新能力. 道理很简单: 1. 计算机和软件是用英语创造出来的 2. ...
- 番外篇1:在Windows环境中安装JDK
他山之石,可以攻玉!欢迎关注我的微信公众号 本文作为构建第一个Java程序的番外篇一,跟大家探讨下在Windows下怎么安装JDK.由于本人没有Mac,因此如果是Mac的同学,请自行百度哦! 读前预览 ...
- [uboot] (番外篇)uboot之fdt介绍
http://blog.csdn.net/ooonebook/article/details/53206623 以下例子都以project X项目tiny210(s5pv210平台,armv7架构)为 ...
随机推荐
- swift 关于didSet 和willSet赋值的注意点
1. 初始化赋值的时候都不会走这个的方法, 需要在创建结构体后或对象后,在赋值,此时才会走这个方法
- iOS 开发实用工具
史蒂芬的博客 (各种软件) http://www.sdifen.com/ 产品原型设计工具 -- 1.墨刀 2.Axure RP 检测接口工具 ---- 1.Charles 2. postman607 ...
- TableView中Label自适应高度
//Xcode6.3以后label自适应需要添加两个属性 _tableView.rowHeight = UITableViewAutomaticDimension; //给予预计行高 _tableVi ...
- centos更换yum源为aliyun源
国外的yum源由于众所周知的GFW原因,有的被墙,有的很慢,阿里云依靠强大的技术优势建立了国内的开源镜像.阿里云Linux安装镜像源地址:http://mirrors.aliyun.com/ 第一步: ...
- mysql5.7 新增的json字段类型
一.我们先创建一个表,准备点数据 CREATE TABLE `json_test` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'I ...
- 【APT】SqlServer游标使用
use [ElephantCredit] go begin transaction tran_bank; print '**脚本开始执行!'; declare @tran_error int , @n ...
- 汇编中CMP的作用
假设现在AX寄存器中的数是0002H,BX寄存器中的数是0003H.执行的指令是:CMP AX, BX 执行这条指令时,先做用AX中的数减去BX中的数的减法运算.列出二进制运算式子: 0 ...
- vue通过代理实现跨域
http://www.cnblogs.com/wangyongcun/p/7665687.html
- JVM 类加载器 (二)
1.类加载器(ClassLoader)负责加载class文件,class文件在文件开头有特定的文件标识,并且ClassLoader只负责 class 文件的加载,至于class文件是否能够运行则由Ex ...
- 08. pt-find
vim pt-find.cnf host=192.168.100.101port=3306user=adminpassword=admin pt-find --config pt-find.cnf d ...