CI
从架构上讲一下正在做的持续集成引擎,明天可能要给人分享。
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
未完待续…