Web Analytics

为buildc添加setup脚本

buildc在发布0.1.0版时并没有做好安装脚本,当时的建议是直接下载0.1.0的源码包或svn export/checkout源码包,并手工将buildc目录位置加入到用户的PATH环境变量中。近期buildc计划正式投入到项目中使用,为了方便大家安装以及以后的统一升级维护,我花了些时间给buildc加上了setup脚本。 Python有标准的程序分发方案,不过我对这些了解不多。buildc本身很简单,我觉得没有必要把安装做得很复杂,所以就自己动手编写了一个setup.py,不到100行,用于安装buildc。 Python的标准安装脚本也叫setup.py,我这里也借鉴了这个名字。有了setup.py,buildc的安装就简单多了: * 下载buildc Release包(当前最新是buildc-0.1.1) * 解压发布包,在发布包路径下,执行setup.py install [–prefix=YOUR_INSTALL_PATH] ...

February 7, 2012 · 3 min · Tony Bai

C语言项目构建管理辅助工具 – buildc

这几年我一直从事C语言项目的开发。这些项目的规模都不算小,少则十几万代码,多则几十万行代码,至少也都算得上是中型项目吧。项目构建工具使用的是传统的Make工具,构建脚本都是自行编写的,构建时直接在顶层目录下敲入make即可。 这种传统的构建方式其实是很耗时费力的。比如执行make之前你需要根据项目代码的实际路径重新设定一些环境变量或修改Makefile中的某些标识路径的变量;你还要将项目依赖的各种内部公共库、第三方开源库悉数找到,并安装在指定目录下,修改Makefile中这些第三方库的路径配置。只有做完这些后,你才能顺利地执行Make。以后每当你更换一个环境,你就要将上面的步骤重复执行一遍。有的项目第三方依赖较多,要完整地搭建一个项目构建环境所耗费的时间也是很惊人的,特别是对一些不熟悉项目构建的新人更是如此。另外随着产品被要求具备在多个平台上运行的能力,你的构建脚本还要支持在多个平台上的构建,你要为项目所依赖的第三方库准备多个平台的版本;当某个依赖库版本进行了升级,你还要手工在多个环境下进行更新。 ...

December 8, 2011 · 10 min · Tony Bai

让BuildBot服务于多个项目

多数公司不会仅有一个项目,当你为一个项目引入持续集成实践后,其他项目就会接踵而来。这时你会重新考量BuildBot,考虑如何让BuildBot可以服务于多个项目。 如果你有足够的主机资源和人力资源,那为每个项目单独搭建一套CI环境是再好不过的了,每个项目都有专人维护CI环境,各个项目的配置互不干扰。不过对于一些公司来说,这显然有些浪费,BuildBot Master的资源消耗是不大的,我们完全可以使用一套BuildBot Master来服务于多个项目,至少BuildBot是可以支持这样做的。 ...

June 7, 2011 · 4 min · Tony Bai

解决BuildBot构建结果mail无法发送的问题

在“使用BuildBot搭建持续集成环境”一文中我曾经说到:公司使用的mail服务器只支持SSL连接,而BuildBot似乎对SSL连接的支持有些问题,导致构建结果mail无法发送“。BuildBot实际上使用的是Twisted的mail库来发送邮件的,我下载了Twisted的一些mail发送的例子程序,并使用我的公司mail账户配置,但依旧发送失败。看来这个问题与Twisted的实现有关了。 这个问题已经折腾我许久了,难道非得让我去debug Twisted库?还好,今天我想到了另外一种方法:使用stunnel。原理是这样的:通过stunnel将非SSL连接转换为到公司mail服务器的SSL连接,通过stunnel建立的这条转化通道,mail发送的问题就应该可以解决了。想法归想法,实际上能否达到我的目标,还得通过试验验证。 首先我们需要在BuildBot的master服务器上安装stunnel。 ...

May 31, 2011 · 4 min · Tony Bai

使用BuildBot搭建持续集成环境

部门的持续集成一直做的不太好,我们开发部这边甚至一直没能做起来,这其中有各种原因:工具、意识、执行力、沟通等等。将持续集成引入到我们的开发过程中也一直是我的一个目标。去年末启动的一个项目让我感到时机变得成熟了。 新项目的代码是完全重写的,这样的机会甚是难得。因为大多数情况下大家都是在维护现有系统:做些添添补补、修正Bug以及优化之类的事情。项目初期,我特别向大家强调了要严格遵守统一代码风格并将astyle代码格式化工具介绍给大家,手把手地教大家如何利用类似LCUT这样的单元测试框架编写单元测试,讲解什么是Mock测试。前些时间我又将代码风格检查 脚本加入到工程的构建过程中,并将代码风格检查作为最终构建目标的关键依赖,强制大家编写出统一风格的代码。 ...

May 18, 2011 · 8 min · Tony Bai

Ubuntu一年使用感受

今天是Ubuntu 11.04版本(Natty Narwhal)发布的正日子!想必全世界的Ubuntu Fans们都会或多或少的兴奋上一阵儿。我接触Ubuntu这个Linux发行版较早,甚至可以追溯到Ubuntu 5.10。不过真正将Ubuntu作为我日常工作学习的第一操作系统还是在去年Ubuntu 10.04LTS版本发布之后。从那时起到现在整整有近一年时间了。这里我也来说说这一年来使用Ubuntu的感受。 ...

April 29, 2011 · 5 min · Tony Bai

也谈SVN冲突解决

当今的软件开发更多是团队合作,团队的所有成员均工作在同一份代码库上。这样即便是有了先进的版本控制管理工具(诸如Subversion、Git等),出现冲突(Conflict)的情况也是在所难免的。这就需要你学会解决冲突。 以Subversion为例,多数人在学习这类工具时都选择了浅尝辄止,仅仅停留在会使用update和commit这些常用的命令上。这样大家就错过了那些可以帮助你快速解决冲突的命令,以致很多人无论遇到任何冲突情况都采用了低效的全手工处理的方式。实际上不同的冲突情形处理的方式是有差别的。某些情况下,利用类似svn resolve这样的命令可以帮你快速解决冲突。我们应该有意识地采用一些专业的做法,不是吗?^_^ ...

March 23, 2011 · 5 min · Tony Bai

把一切都纳入版本控制

本文翻译自"Put Everything Under Version Control",来自于《97 Things Every Programmer Should Know》一书中的某个章节。 把项目中的一切都纳入版本控制。你需要的资源包括:免费的工具,比如Subversion,Git,Mercurial和CVS;充足的磁盘空间;便宜且性能强大的服务器;无处不在的网络;甚至包括项目托管服务。安装好版本控制软件后,为了将你的工作成果放入版本库中,你所要做仅仅是在一个包含你的代码的干净目录中敲入适当的命令。你只需要学习两个新操作:将你修改的代码提交到版本库中以及将版本库中的代码更新到你本地的工作版本中。 ...

February 18, 2011 · 3 min · Tony Bai

小试git-svn

部门一直使用Subversion作为源码版本的管理工具。说实话,Subversion比较适合目前部门的绝大多数项目:没有异地团队开发,代码中心化管理;基本上都在trunk上开发,较少使用分支,基本上没有在各个branch间切换的成本。但对于我来说,有些情况下Subversion并不能满足我的需求。 问题主要集中在本地代码的备份和版本管理上。也就是说对于尚未或暂无法提交到Subversion服务器的本地代码来说,存在着被误删除和版本更新无法回退两大杯具情形。而对于这些情况,Subversion工具是无能为力的。 这时我们就需要借助其它工具来帮我们解决问题。Git就是这样一款很给力的工具,它是一款分布式版本管理工具,由linux的缔造者Linus Torvalds设计并实现,具体关于Git的介绍和使用方法可参见其官方站。这里要说的是Git是如何做到既可以管理好本地代码又可以与已有的SVN中心库进行同步的。 ...

January 20, 2011 · 5 min · Tony Bai

基于svn diff结果的有效代码量统计

很多公司的过程中都有阶段性统计新增或修改的有效代码行数这一环节,这里先不论统计出的结果用于做什么,就统计本身而言,常常存在诸多问题,比如统计过程耗时且繁琐、统计结果中估算成分较大,不精确等。这些问题以前也一直困扰着我们,并且长时间没有想出很好的解决办法。 ...

December 24, 2010 · 2 min · Tony Bai