How to Make a AutoBuild System with Git Server

今天给大家分享一下最近自己的成果, 折腾了一个autobuild系统, 如果您和我有同样的需求, 不妨跟随我一起搭建一个这样的系统, easy and simple, have fun :) Why:   事情是这样开始的, 我自己的项目放置在github上, 这是一个linux项目, 然而我所用来开发的机器是mac, 它不能用来编译所有的模块, 每次我都需要push提交之后, 再去server上pull下来, 然后编译看看结果, 这个过程我持续了一阵子之后再也忍受不了了, 我想要一个这样的系统: 1. 当我push提交之后, 他能实时的反馈给我编译的结果, 就像本地编译一样 2. 运行test unit, 并将结果实时反馈给我 3. 随后发送一封邮件到我的邮箱内, 包含编译结果以及test unit运行结果 4. 而这次的提交仅仅是为了测试集成的效果, 而不影响真正的版本库主干 How:   目的明确后, 我想到了git hook, 这里面的hook有一个可以满足我的需求– post-receive, 这是一个server端的hook(shell脚本), 每当接收到applypatch后都会调用一次并将输出结果反馈给client, 接下来我们将开始利用这个hook搭建这套系统. 首先我们来看一下工作流程(如下图): 图1 WorkFlow 简单的描述一下这个流程, 相对还算清晰简洁, 找一台可以用作build的机器, 建立一个git bare repo 用于接受提交, a clone repo for … Read more

Include C file

好吧, 看到标题你一定认为我犯了一个big mistake, 我没有遵循include .h标准范式去编写程序, 不过我还是想说说这里面的好处 :) 现在我们有一个需求, 想要编写一套事件库以便适应不同的平台(linux, freebsd … ), OK, 这里有一个显然的问题是我们需要一套抽象接口, 以便不同的平台都去遵循使用它们, 在不同平台下编译可以使用相应的.c文件, 我们需要建立抽象接口头文件, 但是如何去找到不同的实现文件那? 因为不同的实现文件需要在编译期指定好, 写在Makefile里做参数? 显然不够智能, 我们还是希望可以auto build. 于是我们想出了一套看似完美的方案, 为不同平台建立不同命名的头文件, 比如linux下使用 ev_epoll.h, freebsd下使用ev_kqueue.h, 不过这两个文件内部使用完全相同的接口定义, 一般来讲这没什么问题, 我们只需要在framework里根据不同平台include不同的header即可~ . 不过这里有个潜在的问题, 我们一旦修改了抽象接口定义, 不但要修改响应实现文件(这不可避免), 还需要级联的维护响应的headers, 这看起来很糟糕, 然后聪明的我们又想出来一个升级方案, 在这些不同平台的headers里面统一include一个global header(包含抽象描述), 我们拿着这套方案感觉很nice~ , 不过我们一旦修改, 仍然不可避免的去要修改global header, 虽然代价已经很小了~ :D 好了, 赘赘的说了一大堆, 开始进入正题, 我们能不能有什么办法去掉这个header, 因为这个header本质上没有存在的价值, 外部并需要看到他, 多个它放在那会让使用者头大不已, 请出我们今天主角:”include … Read more

Categories Uncategorized

整理下自己写的常用库

整理了一下之前自己写的库. 地址在 https://github.com/finaldie/final_libs 有兴趣的同学可以自取 :) 有什么建议可以mail给我(hyzwowtools@gmail.com or hyzwowtools@163.com) libs contain: 1. a fifo list ( lockfree in one production one consumer ) 2. hash table 3. mutex ( wrap system lock ) 4. log ( asynchronous log, aio not recommand use ) 5. memory buff ( a light-weight buff ) 6. read conf 7. timer 8. thread cache … Read more

Categories Uncategorized