工作中遇见的一个问题,提供项目源代码的情况下,希望对项目进行持续集成,达到一个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无法实现更好的持续集成问题的更多相关文章

  1. (八)羽夏看C语言——C番外篇

    写在前面   此系列是本人一个字一个字码出来的,包括示例和实验截图.本人非计算机专业,可能对本教程涉及的事物没有了解的足够深入,如有错误,欢迎批评指正. 如有好的建议,欢迎反馈.码字不易,如果本篇文章 ...

  2. (九)羽夏看C语言——C++番外篇

    写在前面   此系列是本人一个字一个字码出来的,包括示例和实验截图.本人非计算机专业,可能对本教程涉及的事物没有了解的足够深入,如有错误,欢迎批评指正. 如有好的建议,欢迎反馈.码字不易,如果本篇文章 ...

  3. 【番外篇】ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  4. 给深度学习入门者的Python快速教程 - 番外篇之Python-OpenCV

    这次博客园的排版彻底残了..高清版请移步: https://zhuanlan.zhihu.com/p/24425116 本篇是前面两篇教程: 给深度学习入门者的Python快速教程 - 基础篇 给深度 ...

  5. 可视化(番外篇)——在Eclipse RCP中玩转OpenGL

    最近在看有关Eclipse RCP方面的东西,鉴于Gephi是使用opengl作为绘图引擎,所以,萌生了在Eclipse RCP下添加画布,使用opengl绘图的想法,网上有博文详细介绍这方面的内容, ...

  6. 番外篇 之 C#委托

    对于上一节 番外篇之C#多线程的反思 反思一:   Thread th = new Thread(参数); ////参数的总结 ////首先,第一情况,对于 Thread th = new Threa ...

  7. [置顶] think in java interview番外篇-谈程序员如何修练英语

    一.程序员对英语能力的重视度和能力要求应该是在各行各业中排在比较靠前的 这样说吧,英语程度的好坏直接影响着一个程序员的编程.开发.创新能力. 道理很简单: 1. 计算机和软件是用英语创造出来的 2. ...

  8. 番外篇1:在Windows环境中安装JDK

    他山之石,可以攻玉!欢迎关注我的微信公众号 本文作为构建第一个Java程序的番外篇一,跟大家探讨下在Windows下怎么安装JDK.由于本人没有Mac,因此如果是Mac的同学,请自行百度哦! 读前预览 ...

  9. [uboot] (番外篇)uboot之fdt介绍

    http://blog.csdn.net/ooonebook/article/details/53206623 以下例子都以project X项目tiny210(s5pv210平台,armv7架构)为 ...

随机推荐

  1. Java_7 ArrayList集合

    1 ArrayList创建变量的步骤 1: 导入包 java.util包中 2: 创建引用类型的变量 数据类型< 集合存储的数据类型> 变量名 = new 数据类型<集合存储的数据类 ...

  2. html 导出pdf

    地址: https://developers.itextpdf.com/examples/xml-worker/html-lists 主方法: public string Generate(strin ...

  3. js学习(初)

    一种弱数据类型语言  var 基础: 处理字符串的函数 数组基础操作 流程控制语句 选择,分支 循环for for in for(索引变量 in  对象){ 语句块 } 面向对象: js语言的对象就是 ...

  4. 11-web网页制作APP

    如何将H5和WebApp 加壳成apk.ipa     问题:已经做好的纯H5的站点 想分别加两个壳子,变成apk和ipa ,要怎么实现? 要点: 1. app只是壳子,打开app直接跳转到H5的Ur ...

  5. 编程:在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串'welcome to masm!'

    80*25彩色字符模式显示缓冲区的结构: 内存地址空间中,B8000H~BFFFFH共32KB的空间,为80*25彩色字符模式的显示缓冲区.向这个地址空间写入数据,写入的内容将立即出现在显示器上. 在 ...

  6. springmvc.xml,context.xml和web.xml

    1:springmvc.xml配置要点 一般它主要配置Controller的组件扫描器和视图解析器 下为:springmvc.xml文件 <?xml version="1.0" ...

  7. 工作中用Git对项目进行管理

    前言 之前一直是用svn来管理代码的,今天第一次用git来管理代码,从安装.上传代码过程中遇到了很多问题,Github中建的repository之前还是https协议,最后不知道怎么又变成了git协议 ...

  8. [z]表空间对应文件的AUTOEXTEND ON NEXT指定的值对性能的影响

    创建表空间的时候指定的数据文件可以设为自动扩展,以及每次扩展多少容量,如果发现在大数据量插入的时候非常慢,可能的原因是NEXT指定的值太小.下面来模拟一下这个过程:1,创建一个表空间:CREATE T ...

  9. [z]libevent入门教程:Echo Server based on libevent 不指定

    [z]https://www.felix021.com/blog/read.php?2068 花了两天的时间在libevent上,想总结下,就以写简单tutorial的方式吧,貌似没有一篇简单的说明, ...

  10. opencv 3.2图像矩(Image Moments)

    图像矩乍看比较难理解,看了很多资料,大概明白了一些,但还是无法在脑海里形成一个模型概念,于是从源码中寻找它的应用. 今天就通过公式和程序抓取数据,来进一步理解图像矩 先看一个图片 这是程序运行结果, ...