基于Docker/Docker-Compose/EvaEngine的持续交付工具, 主要完成单元测试结束到生产环境部署的流程:
- 从项目代码构建Docker镜像
- Push镜像到Docker registry(目前为阿里云)
- 生成docker-compose yaml配置
- 上传docker-compose 配置到七牛
- 构建过程提供实时Log查询接口
工作流:
全局依赖:
- Git
- Redis
- Docker
- Docker-Compose
假设所有项目位于/opt/htdocs
目录
1. 获得本项目代码
cd /opt/htdocs
git clone [email protected]:EvaEngine/docker-builder.git
2. 安装项目依赖
cd docker-builder
make install
3. Clone要构建项目代码, 假设要构建项目为EvaEngine/EvaSkeleton.js
, 请确保git有权限访问要构建项目
cd /opt/htdocs
git clone [email protected]:EvaEngine/EvaSkeleton.js.git
4. 编辑config/config.local.production.js
, 将编译项目加入配置
module.exports = {
dockerBuilder: {
rootPath: '/opt/htdocs', //源代码根目录
composeSite: 'http://compose.evaegine.com', //存放compose文件的url
projects: { //支持编译的项目
eva_skeleton: {
path: 'EvaSkeleton.js', //项目路径, 相对于根目录, 如果以斜线开头则为绝对路径
allowNoTag: false //是否允许构建非Tag版本
}
},
qiniu: { //七牛文件上传配置
bucket: 'XXX',
key: 'XXX',
secret: 'XXX'
}
}
};
5. Web API启动:
npm start
6. Worker启动:
npm run worker
7. 登录Docker Registry
sudo docker login --username=XXX registry-internal.cn-hangzhou.aliyuncs.com
8. 在Docker Registry创建初始镜像
阿里云中在容器服务内选择创建镜像仓库, 镜像名与项目内镜像名一致, 仓库类型选择私有, 代码源选择本地仓库
9. 开始构建
假设构建EvaSkeleton.js项目的v1.0
访问/v1/build/eva_skeleton/v1.0
, 会开始项目的构建过程, 同一项目同一版本只能有一个Worker对其进行构建
所有微服务项目需要有自我构建的能力,本项目仅做辅助与调度
被构建项目必须包含以下结构:
.
├── Makefile
├── compose/ 存放compose yaml
被构建项目必须包含以下指令:
make sync-code
同步所有分支代码make docker-build
安装项目依赖, 并将项目构建为Docker镜像make docker-ship
将项目Docker镜像推送到Docker-Registry, 并在compose/
生成compose配置文件