从架构上讲一下正在做的持续集成引擎,明天可能要给人分享。

Engine是总的入口。Engine本身主要做了三件事情:

  • 分析参数
  • 解析app.yml文件,生成新的App
  • 分配机器

值得注意的是,由于depend_on参数的存在,对yaml文件的分析是一个递归调用的过程。

最开始机器分配,是按照yaml解析结果,递归统计总的App个数,依次分配机器。由于现在增加了环境复用的功能,可以通过data.yml文件,根据每个App的name,同样的应用可以复用上一个stage的环境(机器),所以对复用环境不会分配新的机器。分配的机器会保存在App里machine的参数。

最后我们得到的就是一个App. App里面提供了两个方法:

  • default
  • depend_deploy

两个方法本质上是一致的。不过depend_deploy是用于部署依赖应用,所以省略了Ut, It等非必要步骤。
我们调用default方法:

  • setup_machine
  • build_dependents
  • source_analyze
  • CI steps

首先我们看setup_machine:

  • check_os,用于识别是windows还是linux环境,根据app本身参数
  • 下载opshell,由于我们的脚本都在opshell中,所以先执行这个操作
  • 执行setupBase.sh,理论上这个脚本是用来补充镜像的,应该最早执行,但是基于它是在opshell中的,故放到这一步
  • check_lang,识别是Java,Cpp还是其他语言的工程
  • 安装puppet
  • 执行app.yml中prepare的命令

到此完成了环境的准备

然后再是build_dependents,这一部分其实就是递归调用依赖应用的depend_deploy方法。

source_analyze,目前是处理源文件中的sql脚本的。

最后才是真正的CI命令:

  • static_check
  • setup_service
  • unit_test
  • package
  • install
  • after_install
  • start
  • set_connect
  • run_it

未完待续…