本期推荐的 Dory-Engine是一个简单得非常吓人的应用上云引擎,doryctl是Dory-Engine的命令行管理工具。
架构设计
- DORY是一个无状态设计的应用服务,它的核心能力是任务调度器。
- DORY的所有任务执行都是在执行器(executor)远程docker中执行,DORY连接远程docker,下发各种编译构建任务、镜像打包任务、代码扫描任务,把执行任务的负载分担到远程执行器(executor)中。
- 作为任务调度器的DORY以及作为任务执行器的executor都是分布式架构,都可以根据调度任务的负载以及执行任务的负载进行水平扩缩容,具有很高的弹性。
- DORY接管DevOps持续交付工具链各个组件,自动为项目开通相关组件配置,包括代码仓库(支持Gitlab和Gitea)、容器镜像仓库(支持Harbor)、依赖与制品仓库(支持Nexus)、代码扫描(企业版支持,支持Sonarqube)、镜像扫描(企业版支持,支持Anchore-Engine)。
- DORY可以管理多个kubernetes集群、OpenStack集群(企业版支持)、VmWare集群(企业版支持)、多个主机(企业版支持),把编译、打包的微服务,部署到kubernetes环境或者各类主机环境。
- 企业版支持通过Istio服务网格,让应用的多个微服务支持蓝绿发布、金丝雀发布、AB测试三种混合灰度发布模式。
- DORY可以管理多个数据库,把数据库的执行或者回滚脚本在多个数据库中执行(企业版支持)。
- DORY可以部署在kubernetes集群中,或者使用docker-compose方式进行部署,生产环境部署推荐使用kubernetes方式
- 该架构有如下特点:
- 分布式: Dory-Engine使用无状态设计架构,轻松实现分布式水平扩缩容。远程步骤执行器(Docker)可以根据工作负载,进行水平扩缩容实现高弹性。
- 易扩展: 通过容器技术,让步骤支持各种执行环境,实现应用上云流程的灵活扩展。
- 多云编排: 可以同时接管多个不同的云原生环境、主机环境、各种数据库环境,把应用发布到多个不同环境。
- 协同治理: 接管DevOps持续交付工具链各个组件,自动开通配置好各个组件和云原生环境,应用上云从未如此简单。
DORY依赖的基础服务
- DORY使用MongoDB作为数据库,Redis作为缓存,OpenLDAP作为用户中心。
- DORY可以同时连接多个远程docker作为执行器(executor)
- DORY和所有执行器(executor)使用一套共享存储,流水线执行过程中产生的各种文件都会存储到共享存储中,可以通过设置开关在流水线执行结束后清理流水线执行过程的临时数据。
快速开始
两种安装模式
kubernetes
- 把DORY部署在kubernetes中,自动创建两个不同的namespace用于运行DORY相关服务以及harbor镜像仓库
- DORY的执行器executor可以在kubernetes集群中的不同节点启动
docker-compose
- 使用docker-compose部署DORY,自动创建两个不同的docker-compose.yaml用于运行DORY相关服务以及harbor镜像仓库
- DORY的所有执行器executor只能在同一个节点启动
本期只介绍docker-compose安装方式
警告:DORY服务安装过程需要使用管理员权限,建议使用root用户运行doryctl进行DORY安装,安装前,请保证你已经有一个可用的kubernetes集群,并且所有kube-system名字空间的Pod处于Running状态。(详细参见doryctl install check –mode docker指令输出要求)
自动模式安装:自动完成DORY相关组件安装,安装完成后根据指引完成几项组件配置即可正式完成DORY安装
# 1. docker-compose模式安装前检查
doryctl install check --mode docker
# 2. 从docker hub拉取安装过程需要的镜像
doryctl install pull
# 3. 获取docker-compose模式安装的配置参数样例
doryctl install print --mode docker > install-config-docker.yaml
# 4. 手工修改安装配置参数,特别注意安装目录以及kubernetes连接参数等信息
vi install-config-docker.yaml
# 5. 自动以docker-compose模式安装DORY
doryctl install run -o readme-install-docker -f install-config-docker.yaml
# 6. 安装完成后会提示相关配置说明,完成相关配置后即可完成DORY部署
手动模式安装:如果用户需要在安装过程中手动修改相关部署文件,可以使用手动模式安装,安装命令仅自动生成所有安装说明以及安装配置文件,用户再根据输出的安装说明来手工完成安装
# 1. docker-compose模式安装前检查
doryctl install check --mode docker
# 2. 从docker hub拉取安装过程需要的镜像
doryctl install pull
# 3. 获取docker-compose模式安装的配置参数样例
doryctl install print --mode docker > install-config-docker.yaml
# 4. 手工修改安装配置参数,特别注意安装目录以及kubernetes连接参数等信息
vi install-config-docker.yaml
# 5. 获取手动安装DORY的所有配置文件以及脚本,并输出相关帮助指引
doryctl install script -o readme-install-docker -f install-config-docker.yaml
[WARNING] 2022-01-11 10:33:43: all scripts and config files located at: readme-install-docker
[WARNING] 2022-01-11 10:33:43: 1. please follow readme-install-docker/README-docker-install.md to install dory by manual
[WARNING] 2022-01-11 10:33:43: 2. please follow readme-install-docker/README-docker-config.md to config dory by manual after install
[WARNING] 2022-01-11 10:33:43: 3. if install fail, please follow readme-install-docker/README-docker-reset.md to stop all dory services and install again
# 6. 根据指引,进入相关输出目录,查看指引文件,根据指引文件手工完成安装。
cd readme-install-docker
ls -alh
drwx------ 5 root root 4.0K 1月 11 10:33 .
dr-xr-x---. 12 root root 4.0K 1月 11 10:33 ..
drwx------ 4 root root 4.0K 1月 11 10:33 dory
drwx------ 5 root root 4.0K 1月 11 10:33 harbor
-rw------- 1 root root 2.3K 1月 11 10:33 project-data-alpine.yaml
-rw------- 1 root root 2.9K 1月 11 10:33 README-docker-config.md
-rw------- 1 root root 7.5K 1月 11 10:33 README-docker-install.md
-rw------- 1 root root 619 1月 11 10:33 README-docker-reset.md
创建项目
- 根据doryctl安装配置指引,打开dory-dashboard管理界面,管理控制台 ➡ 新增项目,新增项目
- 项目开通后,将会自动创建DORY的项目配置、演示代码仓库、容器镜像仓库、依赖与制品仓库,并会自动创建项目的kubernetes名字空间以及分配项目的持久化存储。
- 打开项目代码仓库,Documents目录包含演示项目的说明文档
├── BuildDepends # 编译构建依赖配置存放目录
│ ├── .config
│ ├── .gradle
│ ├── .m2
│ ├── .npmrc
│ ├── .pip
│ ├── README.md
│ └── go
├── Codes # 演示代码存放目录
│ └── Backend
│ ├── tp1-gin-demo # go语言编写的独立web接口服务
│ ├── tp1-go-demo # go语言编写的web接口服务,与其他几个服务组成微服务调用链
│ ├── tp1-gradle-demo # groovy语言编写的函数,仅用于编译构建测试,不进行打包发布
│ ├── tp1-node-demo # javascript语言编写的web接口服务,与其他几个服务组成微服务调用链
│ ├── tp1-python-demo # python语言编写的web接口服务,与其他几个服务组成微服务调用链
│ └── tp1-spring-demo # java语言编写的web接口服务,与其他几个服务组成微服务调用链
├── Documents # 演示项目各个微服务说明
│ ├── README.md
└── README.md
拉取项目代码,并修改代码,执行应用上云流程
# 从代码仓库拉取代码
git clone http://${YOUR_GITREPO_URL}/${YOUR_PROJECT_NAME}/${YOUR_PROJECT_NAME}.git
cd ${YOUR_PROJECT_NAME}
# 把远程分支设置为本地分支
git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
# 查看本地分支情况,现在新增了hotfix分支
git branch --list
* develop
hotfix
# 修改任意一个代码,并进行提交
git commit -a -m 'my first commit'
# 把代码推送到代码仓库,自动触发流水线
git push origin