持续集成(Continuous Integration )系统的版本管理 (Version Management)子系统 - lifuzu/cafe GitHub Wiki

持续集成系统需要一个能管理版本字符串的子系统。每一次系统的编译,版本字符串都应该自动的生成。版本的定义方法,我们可以参考 http://semver.org/,这里我们把版本定义为 x.y.z.b, 例如:1.3.6.34. x的意思为Major变动,y字段为Minor变动,z为Patch的变化,而b就是build的次数。

我们需要设计一个Version string, 即 1.3.6.34 的自动生成机制,这里的需求是每个字段都应该可以任意设置,可以自由提取,并且b字段应该每次编译前或者后自动+1。

在互联网上,我们找到了一个以前ThoughtWorks的原型实现: escape (http://code.google.com/p/escservesconfig), 于是下载源代码,(一点ramaze版本Hardcode的修改之后)安装成功。 Escape is running

 Escape is running

随后进行试用。 Escape interface in Chrome Escape interface in Chrome

能够满足需要,不但可以设置Version string,就连环境变量也可以用这个工具,不错!但是可能因为是最初的版本,也没有后期维护,UI的使用有很多Bugs。

其实Version string的管理本质上和环境变量的管理一样,是Key/Value的设置,于是又想到以前试用过的一种NoSQL数据库系统 Redis (http://redis.io). 我们可以利用数据库保存变量信息,使用基于node.js的client,或者基于python的client,实现Key/Value的设置和提取。Redis内置了变量 INCR (+1)的命令,从而可以保证b字段的原子性(atomic),完全可以满足需要。