持续集成

上一篇 / 下一篇  2015-11-25 11:32:24 / 个人分类:jenkins

秀逗了,做了一年多持续集成是个什么东西居然没有理清,百度百科:持续集成(持续集成是一种软件开发实践,即团队开发成员经常集成它们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。)再次揣摩了下百度百科的意思,悟了下持续集成,即软件过程的自动化集合,软件过程有分析/设计/开发/测试/维护,理想的持续集成当然是一条龙服务到底了,当然那个时候我们都得打包离开去搬砖了。对于分析/设计/开发等等一些创造性的工作目前没有定式没有规则可循,想要自动分析自动编码只能靠未来的人工智能了,转入正题,就我目前接触过的持续集成,有集成单元测试/自动化测试/环境搭建/性能测试,合理的组合这些过程并自动化起来,对于项目工作确定显得省事,方便很多,当然这些得依赖于项目本身各个过程已经具备了自动化的实现,比如单元测试已经实现自动静态分析,自动插桩,自动运行的功能,自动化测试已经有了能执行起来的框架,环境搭建有章可循,利用脚本或工具自动化。举例来说:C++项目编译发布怎么自动化,当然是少不了makefile,怎么让makefile能扩展编译功能,自动执行make编译指令,扩展makefile无外乎两种方法脚本外部处理或是自身扩展,makefile自身扩展不细说了,因为makefile本身就可以当作是个编译脚本,可以利用模式规则匹配目标对象实现自动索引源码。如下linux下动态库生成案例:
%.so : %.o
 $(LINK) $(LFLAGS) $(CLS_LIBS) $^ -o $@
外部脚本扩展就是通过脚本带入目标对象/依赖体,替换makefile目标对象/依赖体。在此不多做演示。
接着执行makefile中的规则了,并发布最新动态库(make ------ 拷贝源码到发布目录)

举例完了,现在假如源码是通过svn管理,另外编译出来的结果要验证正确性该如何是好,当然在上面示例中少不了shell,实例更新代码/结果比较范例如下:
#下源码
svn checkouthttp://XXXXXX/demo
#更新源码
svn up 
#编译前生成一个对比文件
touch $HOME/XXXX/pk_file
#编译前生成目标对象
svn log -v -r $nowversion:$newversion $SVN_URL | grep ***>compile_list
#编译
make
#编译后的目标对象收集
find $HOME/XXXX/ -newer $HOME/XXXX/pk_file|grep so|sort -u>so_list
#编译结果比对
diff compile_list so_list>diff_list>/dev/null
if [ $? -eq 0 ]; then
  add_result=TRUE
else
  add_result=FALSE
fi
if [ $add_result = "FALSE" ]; then
  echo "编译有问题,请检查"
  exit 1
fi
…………

环境搭建好了,接下来该干什么,当然是自动化测试/性能测试
这里针对各个过程我采用了jenkins来集成工作,建立自动化测试或性能测试任务与环境搭建关联起来,其中我自动化和性能依赖的是UFT和LR工具,jenkins对应有HP工具插件配置工作路径,当然也可以不用它的插件,通过批处理驱动入口方法启动测试执行,单元测试前面漏了,应该是提完代码并行做单元测试和环境构建,针对c++源码我采用的是c++test做的单元测试,工具本身支持命令行操作:cpptestcli,比较简单,当然前提是在执行前已有完整的单元测试用例,静态检查规则,这里我再在jenkins里建立个单元测试任务与环境构建任务并行处理即可。
配合扩展邮箱插件,针对上述任务每天就只用收收邮件即可。

大概一个持续集成的框架就实现了,其中这里面有用到脚本用到工具,实际过程中怎么方便怎么来,主要能把活干好就行了。一个框架肯定不可能是一成不变的,该做的事很多,比如换个项目可能以上的构建过程就用不了了,那么如何找过程共性,过程如何用代码实现,如果形成简洁的构建报表和趋势图,这些留待后续探讨。


TAG:

 

评分:0

我来说两句

Open Toolbar