实习番外篇:解决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架构)为 ...
随机推荐
- Java_10 继承
1 继承的好处 继承的出现提高了代码的复用性,提高软件开发效率. 继承的出现让类与类之间产生了关系,提供了多态的前提. 2 继承的注意事项 在Java中,类只支持单继承,不允许多继承,也就是说一个类只 ...
- Java08-java语法基础(七)构造方法
Java08-java语法基础(七)构造方法 一.构造方法 1.什么是构造方法? 构造方法(类方法)是一个方法名和类名相容的特殊的成员方法. 2.构造方法的作用? 当使用new关键字创建一个对象时,为 ...
- POST请求测试地址
http://service.xunjimap.com/xunjiservice/common1_0_4/index?53D2CFEB65F6BBEEEB42836FE18E7E0D params.a ...
- 安装doxygen(一个自动文档生成工具)+Graphviz图形可视化软件
参考文章: http://www.fmddlmyy.cn/text21.html http://www.cnblogs.com/duguguiyu/archive/2008/06/29/1231852 ...
- golang语言中os包的学习与使用(文件,目录,进程的操作)
os中一些常用函数的使用: package main; import ( "os" "fmt" "time" "strings&q ...
- 异常处理 day 30
异常处理 一 错误和异常 二 异常处理 2.1 什么是异常处理? 2.2 为何要进行异常处理? 2.3 如何进行异常处理? 三 什么时候用异常处理 异常和错误 part1:程序中难免出现错误,而错误分 ...
- 如何提高php应用的性能?
1. 如果能将类的方法定义成static,就尽量定义成static,它的速度会提升将近4倍.2.$row[’id’] 的速度是$row[id]的7倍.3.echo 比 print快,并且使用echo的 ...
- Games.RecordMobileGamePlayVideo
1. kamcord https://github.com/kamcord/ 2. Sound Stage & iSimulate http://blog.tacograveyard.com/ ...
- 安装php_sqlsrv扩展
https://www.cnblogs.com/wtcl/p/7727636.html
- 存储过程和函数 PROCEDURE & FUNCTION
SQL语句执行的时候,要首先编译,然后在被执行.在大型数据库系统中,为了提高效率,将为了完成特定功能的SQL语句集进行编译优化后,存储在数据库服务器中,用户通过指定存储过程的名字来调用执行. 具体而言 ...