Summary
- 介绍流水线、运行、阶段、环节、步骤的概念
- 介绍代码仓库各个代码目录与发布的微服务的关系
- 介绍构建、打包、发布三种核心模块的关系
- 介绍如何通过构建模块开关,设置指定哪些微服务模块进行发布
流水线与模块
流水线、运行、阶段、环节、步骤的基本概念
流水线(pipeline)
: 类似Jenkins中pipeline的概念,是一系列自动化步骤的配置,用于设置应用如何发布到云原生环境。分为两类流水线:持续交付(CI/CD)流水线
: 核心能力用于把应用从源代码构建
➡打包
➡发布
到云环境,主要用于应用源代码发生变更后,需要持续交付到云环境的场景。运维(OPS)流水线
: 用于日常在云环境调整应用的部署方式,或者其他一些非持续交付的场景,例如: 应用的版本回滚、微服务的状态检查、自动化测试、自动化代码扫描、自动化安全扫描等场景。
运行(run)
: 流水线(pipeline)每执行一次,就会形成一个运行(run)
,运行(run)
的名字格式为<piplineName>-<buildNumber>
,buildNumber为自增长的编号,例如: test-project1-develop-2。- 每个运行会包含流水线的
运行日志
、代码提交记录
、模块执行信息
、步骤执行记录
等信息。 - 每个运行的流水线执行过程将会细分为:
阶段(phase)
、环节(stage)
、步骤(step)
,可以在运行记录中查看各个阶段(phase)
、环节(stage)
、步骤(step)
的日志记录。 运行(run)
、阶段(phase)
、环节(stage)
、步骤(step)
关系如下图:
阶段(phase)
: 一个运行(run)
可以包含多个阶段(phase)
,每个阶段(phase)
串行执行,阶段(phase)
一般都有是否启用(enable)
、超时设置(timeout)
、重试设置(retry)
、异常是否继续执行(ignoreError)
等几项配置。环节(stage)
: 一个阶段(phase)
可以包含多个环节(stage)
,每个环节(stage)
并行执行,假如异常是否继续执行(ignoreError)
设置为否,那么任意一个环节(stage)
出现异常将会立刻终止其他正在执行的环节(stage)
并结束运行(run)
抛出错误。步骤(step)
: 一个环节(stage)
可以包含多个步骤(step)
,每个步骤(step)
串行执行。现在一般一个环节(stage)
只包含一个步骤(step)
。
- 每个运行会包含流水线的
项目与代码仓库、代码目录和发布的微服务的关系
项目(project)
与代码仓库(gitRepo)
的关系: 一个项目(project)
对应的就是一个代码仓库(gitRepo)
,通常表示一个应用相关的所有微服务的代码。- 一个
代码仓库(gitRepo)
可以包含多个代码目录
,每个代码目录
中可以包含不同开发语言编写的微服务源代码或者公共基础类的源代码,进入这些代码目录
可以执行编译构建操作。 - 微服务源代码或者公共基础类的源代码经过
构建
➡打包
之后,就会变成容器镜像
并存放在容器镜像仓库中,进行应用发布的时候,就可以使用这些容器镜像
发布微服务到云原生环境。
基础模块类型
- 所有微服务的源代码都必须经过
构建
➡打包
➡发布
这三个步骤才可以发布到云环境,因此DORY中有三种模块类型:
构建模块
: 设置构建阶段
各个微服务的源代码目录
,如何进行编译构建,形成编译构建包
。例如: java的源代码目录,如何进行编译构建,形成jar包。打包模块
: 设置打包阶段
如何把构建阶段
编译构建出来的编译构建包
,打包成容器镜像
。例如: jar包如何打包成容器镜像,并推送到容器镜像仓库中。发布模块
: 设置发布阶段
如何把打包阶段
打包出来的容器镜像
,在云原生环境以微服务
形式运行。例如: 微服务的对外服务的端口、微服务的启动命令、微服务启动需要多少CPU或者内存资源、微服务的健康检查方式等等。
基础模块的对应关系
-
项目、代码仓库、各种模块有如下关系:
- 一个
项目(project)
对应一个代码仓库(gitRepo)
- 一个
代码仓库(gitRepo)
可以包含多个代码目录
- 一个
代码目录
对应一个构建模块
,不同构建模块
可以分阶段进行构建 - 多个
构建模块
可以打包成一个打包模块
- 一个
打包模块
可以发布成多个发布模块
- 一个
-
现在我们以一个
demo-shop
电子商城项目的例子来讲解为什么这种对应关系可以适应各种非常复杂的应用发布场景
demo-shop
代码仓库中包含五个代码目录:
Codes/Backend/ds-base
: 基础类源代码目录,使用java开发,使用maven编译构建Codes/Frontend/ds-webapp
: 电子商城前端界面源代码目录,使用javascript开发,使用npm编译构建Codes/Backend/ds-statistic
: 统计分析功能源代码目录,使用python开发Codes/Backend/ds-order
: 订单管理功能源代码目录,使用java开发,使用maven编译构建。需要依赖Codes/Backend/ds-base
编译构建的结果才能进行编译构建Codes/Backend/ds-inventory
: 库存管理功能源代码目录,使用java开发,使用maven编译构建。需要依赖Codes/Backend/ds-base
编译构建的结果才能进行编译构建构建阶段
分为五个构建模块:ds-base
、ds-webapp
、ds-statistic
、ds-order
、ds-inventory
,分别对应五个代码目录。由于ds-order
、ds-inventory
依赖于ds-base
模块的编译构建结果,因此构建分为两个阶段,第一阶段并行构建ds-base
、ds-webapp
、ds-statistic
,第二阶段并行构建ds-order
、ds-inventory
。(通过设置构建模块中的构建步骤ID
可以设置构建模块在哪个阶段进行编译构建)打包阶段
分为两个打包模块:ds-shop
、ds-statistic
。其中构建模块ds-webapp
、ds-order
、ds-inventory
会被统一打包成一个ds-shop
容器镜像;构建模块ds-statistic
会被打包成一个ds-statistic
容器镜像。发布阶段
分为三个发布模块:ds-web-order
、ds-web-inventory
、ds-statistic
。其中打包模块ds-shop
在发布阶段会变成两个微服务ds-web-order
和ds-web-inventory
,分别用于给用户以及库存管理员使用;而打包模块ds-statistic
会被发布成一个ds-statistic
的微服务,用于统计分析用途。
模块开关与智能路由
- 有了上边
基础模块的对应关系
,我们就可以通过构建模块
的开关设置
,使用DORY的智能路由
决定哪些微服务需要发布到云环境。
- 如上图
- 假如
ds-base
、ds-webapp
、ds-order
、ds-inventory
代码目录发生了变更- 那么就会执行
ds-base
、ds-webapp
、ds-order
、ds-inventory
四个构建模块的编译构建- 并执行
ds-shop
打包模块的镜像打包- 最后执行
ds-web-order
和ds-web-inventory
两个微服务的发布