核心概念
目录
核心概念
- 开发项目概念
- 流水线概念
- 关键配置
核心概念
- 现在让我们先搞懂
开发空间
界面上的各个核心概念
开发项目
- Dory-Engine是一个非常简单的k8s远程开发环境,创建开发项目就相当于为开发团队创建相互独立/隔离的k8s远程开发空间,k8s远程开发空间包括以下内容:
代码仓库
: 开发团队的项目代码存放在哪个代码仓库,支持使用gitlab
[支持私有化部署] /gitea
[支持私有化部署] /github.com
/gitee.com
/其他git代码仓库
镜像仓库
: 编译打包的容器镜像自动推送到哪个镜像仓库,支持使用harbor
[支持私有化部署] / 其他容器镜像仓库制品仓库
[可选]: 编译生成的制品压缩包自动保存到哪个制品仓库,支持使用nexus
[支持私有化部署,nexus同时可以作为编译依赖的代理与缓存] / Dory-Engine内置制品仓库 / http,ftp,sftp方式上传制品代码扫描仓库
[可选]: 对项目的源代码进行代码质量扫描,支持使用sonarqube
[支持私有化部署]k8s环境
: 把编译打包的容器镜像部署到哪个k8s集群,支持 v1.16.x - v1.31.x 各种版本的k8s,支持x86 / arm64 等不同架构的k8s节点,支持为项目设置 CPU / GPU 等不同类型的资源配额
- 开始使用Dory-Engine之前,首先需要创建开发项目,创建开发项目后,开发人员才能使用k8s远程开发空间
- 开通开发项目的时候,需要填写相关项目信息,包括以下内容: 项目基础信息、代码仓库信息、镜像仓库信息、制品仓库信息、代码扫描仓库信息、k8s环境信息
- 项目开通过程将会进行以下操作:
- 自动在
代码仓库
中创建演示项目的所有代码,后续执行流水线将会自动从这个代码仓库拉取源代码- 自动在
镜像仓库
中创建项目,后续执行流水线将会自动推送镜像到这个镜像仓库- 自动在
制品仓库
中创建仓库,后续执行流水线将会自动把制品压缩包推送到这个制品仓库- 自动在
代码扫描仓库
中创建项目,后续执行流水线将会在代码扫描仓库中生成扫描报告- 自动在
k8s环境
中创建项目的名字空间,自动分配共享存储,自动为项目分配资源配额,后续执行流水线将会自动把应用部署到这个k8s环境- 创建开发项目后,开发人员无需编写任何流水线脚本,无需编写任何k8s部署清单,无需配置任何代码仓库、镜像仓库和k8s连接参数,修改项目代码即可自动把源代码编译、打包、部署到k8s环境,在k8s环境中调试自己开发的程序
- 每个开发项目的
代码仓库
、镜像仓库
、制品仓库
、代码扫描仓库
、k8s环境
都有独立的访问账号和密码,相互独立/隔离
- 可以在
开发空间
-项目详情
获取项目镜像仓库
、制品仓库
、代码扫描仓库
、k8s环境
的访问密码和token
流水线
流水线 - 源代码 - 模块
- 一个代码仓库中可以包含多个不同编程语言编写的微服务源代码,每个微服务的源代码存在放在不同的目录中
- 流水线需要经过三个步骤:
编译构建
,镜像打包
,k8s部署
才能实现从源代码到k8s环境的上线流程- Dory-Engine流水线对应以上三个关键步骤,分别对应三种关键模块:
构建模块
: 用于定义代码仓库中特定目录的源代码如何进行编译构建,一个构建模块对应一个代码目录,通过模块构建定义
来设置多个构建模块镜像打包模块
: 用于定义编译构建出来的制品如何打包成容器镜像,支持把多个构建模块构建出来的制品打包到同一个容器镜像中,通过镜像打包定义
来设置多个镜像打包模块容器部署模块
: 用于定义打包出来的容器镜像如何部署到k8s环境,支持把一个容器镜像部署成不同的k8s部署实例,通过容器部署定义
来设置多个容器部署模块,容器部署定义是区分环境的- 注意,流水线只是用于组装这些构建、镜像打包和容器部署模块来运行这些模块,所有流水线其实是共用
模块构建定义
、镜像打包定义
和容器部署定义
- Dory-Engine的模块设计可以支持各种复杂的软件开发场景
- 以自动创建的演示项目为例子,演示项目源代码包含了7个目录,对应7个
构建模块
1 2 3 4 5 6 7 8 9 10
demo-codes # 各个演示项目微服务的源代码存放目录 ├── backend # 后端微服务代码存放目录 │ ├── gin-demo # 使用go语言编写的后端接口微服务 │ ├── go-demo # 使用go语言编写的后端接口微服务 │ ├── gradle-demo # 使用groovy语言编写的样例代码,仅用于构建 │ ├── node-demo # 使用nodejs编写的后端接口微服务 │ ├── python-demo # 使用python编写的后端接口微服务 │ └── spring-demo # 使用java编写的springboot后端接口微服务 └── frontend # 前端微服务代码存放目录 └── vue-demo # 使用vuejs编写的前端呈现界面,打包到go-demo镜像中
编译构建
阶段,7个构建模块
会生成7个制品镜像打包
阶段,编辑构建出来的制品会打包成容器镜像,其中vue-demo和go-demo生成的制品会打包成go-demo镜像,5个镜像打包模块
会生成5个容器镜像k8s部署
阶段,5个容器镜像会分别部署到k8s环境,5个容器部署模块
会生成5个k8s部署
流水线 - 阶段 - 环节 - 步骤
- 一条流水线分为多个
阶段
,每个阶段顺序执行
,例如上边的流水线包括: 拉取代码、获取运行配置、编译构建、镜像打包、k8s部署、检查部署状态等阶段- 每个
阶段
下可以有多个环节
,每个环节并行执行
,例如上边的流水线,编译构建阶段有6个不同模块的环节,镜像打包和k8s部署阶段有5个不通模块的环节- 每个
环节
可以由多个步骤
构成,同一个环节下的步骤顺序执行
,大部分情况下一个环节下只有一个步骤- 设置多个
构建模块
、镜像打包模块
、容器部署模块
可以让编译构建
、镜像打包
、k8s部署
环节下有多个并行环节
流水线 - 分支 - 环境
- 在
项目控制台
-项目流水线设置
界面,一个开发项目支持创建多条流水线,一条流水线对应代码仓库的一个分支,创建流水线的时候会自动在代码仓库创建对应分支- 一条流水线把源代码进行编译构建、镜像打包之后,可以把容器镜像分别部署到多个k8s环境,这里环境分两类:
- 测试环境: 容器镜像部署到k8s环境之后,可以执行自动化测试步骤
- 生产环境: 容器镜像部署到k8s环境之后,不会执行自动化测试步骤
- 流水线会先进行测试环境部署,然后弹出人工确认提示,在流水线上进行人工确认后再进行生产环境部署,生产环境为非必填项目
- 一条流水线可以部署到多个测试环境,也可以部署到多个生产环境。多个测试环境和生产环境的情况下,会进行顺序部署
- 创建流水线后,可以看到项目的流水线清单,流水线名称为: ${projectName}-${branchName}
- 执行流水线,会从代码仓库的拉取对应分支的源代码,进行编译构建、镜像打包,然后把容器镜像部署到对应的测试环境和生产环境
- 流水线可以设置不同的架构,
amd64
架构表示使用x86
的CPU架构进行编译构建、镜像打包;arm64v8
架构表示使用arm
的CPU架构进行编译构建、镜像打包- 上图的设置表示,demo-project这个开发项目有两条流水线:
develop流水线
: 拉取代码仓库的develop分支代码,使用x86的CPU架构进行编译构建、镜像打包,然后部署到devops这个测试环境release流水线
: 拉取代码仓库的release分支代码,使用arm的CPU架构进行编译构建、镜像打包,然后部署到uat这个测试环境,进行自动化测试;经过人工确认,再部署到prod这个生产环境
交互式流水线
- 在
开发空间
界面,有一种非常特殊的ops流水线
,这是一种交互式流水线,交互式流水线不对应任何分支和环境- 执行
ops流水线
过程中会弹出各种操作选项,流水线根据操作选项决定在哪个分支、哪个环境、执行哪些操作,交互式执行过程如下:
- 选择代码仓库的分支,例如选择develop分支
- 选择目标操作环境,develop分支流水线配置的环境只有devops环境,所以这里可选的环境只有devops环境
- 选择操作类型,除
编译构建
、镜像打包
这两种特殊操作之外,交互式流水线可以选择各种步骤,还支持自定义步骤- 选择模块,之前的操作类型选择了执行容器部署,这里要选择哪些模块要执行容器部署
- 选择容器部署模块之后,正式执行容器部署操作
- ops交互式流水线提供一个灵活的方式执行流水线,例如你只是调整了
容器部署模块
中的某些k8s部署参数,但是又不想重新走一次编译、打包流程,这个时候执行ops流水线,直接进行k8s部署
流水线运行记录
- 流水线一旦执行就会形成运行记录
- 流水线执行有多种触发方式:
WEBHOOK
: 修改了源代码并push到代码仓库,由代码仓库的webhook触发执行流水线MANUAL
: 手工点击执行按钮执行流水线CRONTAB
: 流水线设置了计划任务,通过计划任务触发执行流水线
- 流水线的运行记录可以以流程图方式查看流水线各个步骤的执行情况,也可以以列表形式查看各个步骤的执行记录,以及查看详细的步骤执行日志
步骤执行记录
- 流水线执行后会形成步骤执行记录,步骤执行记录会抽取该步骤执行过程中的关键信息,让用户无需翻查步骤日志,即可快速了解步骤的关键信息
- 例如容器部署状态检查步骤的执行记录,可以快速查看各个pod的状态,以及快速链接到k8s-dashboard管理容器
关键配置
流水线定义
- 流水线定义主要用于设置流水线的开关,通过这些开关可以设置要启用哪些模块执行流水线,也可以设置启用流水线的哪些步骤
- 流水线定义界面分为四个部分:
- 流水线基础设置
- 模块开关设置: 可以设置需要启用哪些模块执行流水线,这里的模块是指
构建模块
,通过构建模块
的开关可以自动控制相关镜像打包模块
和容器部署模块
的开关。如上图表示只执行 node-demo / python-demo / spring-demo 三个模块的编译、打包、部署- 流水线步骤设置: 可以设置是否启用本步骤、超时设置、重试设置等,根据选择的步骤不同,流水线步骤显示不同的步骤设置。另外也会显示与本步骤相关的定义,例如选择
编译构建代码步骤
,会显示模块构建定义
,这里可以设置本步骤有多少模块,以及模块的参数设置- 流水线步骤选择: 选择不同的步骤,流水线步骤设置会显示不同的参数配置
- 详细流水线定义
|
|
内置的流水线步骤
步骤名称 | 步骤详细说明 | 相关定义 | 相关开关设置 |
---|---|---|---|
gitPull 拉取代码 |
从代码仓库拉取代码,并checkout到对应分支 | 无 | 超时设置 (timeout)选择tag进行后续集成 (selectTag) |
getRunSettings 获取运行配置 |
无 | 无 | 无 |
build 编译构建代码 |
使用步骤执行器docker启动编译环境,执行编译构建命令 | 模块构建定义 |
是否启用 (enable)超时设置 (timeout)重试设置 (retry) |
scanCode 代码扫描 |
使用sonarqube扫描代码 | 模块构建定义 |
是否启用 (enable)异常是否继续执行 (ignoreError)超时设置 (timeout)重试设置 (retry) |
packageImage 镜像打包上传 |
打包容器镜像并推送到镜像仓库 | 模块镜像打包定义 /镜像打包忽略定义 |
是否启用 (enable)超时设置 (timeout)重试设置 (retry)推送到其他镜像仓库 (extraPush) |
scanImage 镜像扫描 |
使用trivy扫描容器镜像 | 模块镜像打包定义 /镜像打包忽略定义 |
是否启用 (enable)异常是否继续执行 (ignoreError)超时设置 (timeout)重试设置 (retry)中风险漏洞门禁数量 (gateMedium)高风险漏洞门禁数量 (gateHigh)关键风险漏洞门禁数量 (gateCritical) |
artifact 制品打包上传 |
把编译的制品压缩包上传到制品仓库 | 模块制品打包定义 |
是否启用 (enable)重试设置 (retry) |
syncImage 同步生产环境镜像到测试环境 |
只有流水线配置了测试环境和生产环境的情况下有效,把生产环境的镜像版本更新到测试环境 | 模块容器部署定义 |
是否启用 (enable)重试设置 (retry) |
deploy 容器应用部署 |
部署应用到k8s环境 | 模块容器部署定义 |
是否启用 (enable)重试设置 (retry)强制替换资源 (forceReplace)把部署文件归档到制品库 (archive)不执行实际部署 (try)忽略执行的模块名 (ignoreExecuteModuleNames) |
applyIngress 部署ingress |
无 | 模块容器部署定义 |
是否启用 (enable)重试设置 (retry) |
applyMesh 服务网格设置 |
使用istio部署应用的服务网格策略 | 模块服务网格网关定义 /模块服务网格定义 |
是否启用 (enable)重试设置 (retry) |
checkDeploy 容器应用状态检查 |
检查部署到k8s的pod是否ready | 模块容器部署定义 |
是否启用 (enable)异常是否继续执行 (ignoreError)重试设置 (retry)检查次数设置 (repeat)检查间隔设置 (repeatInterval) |
checkQuota 项目容器资源配额检查 |
检查项目k8s名字空间已经使用了多少资源 | 无 | 是否启用 (enable)重试设置 (retry) |
deployArtifact 主机应用部署 |
把编译的制品部署到远程主机环境 | 模块制品部署定义 |
是否启用 (enable)超时设置 (timeout)重试设置 (retry)把部署文件归档到制品库 (archive)不执行实际部署 (try)忽略执行的模块名 (ignoreExecuteModuleNames) |
testApi 接口自动化测试 |
使用robotframework进行接口自动化测试 | 无 | 是否启用 (enable)异常是否继续执行 (ignoreError)超时设置 (timeout)重试设置 (retry)测试用例通过百分比 (passingRate)忽略执行的模块名 (ignoreExecuteModuleNames) |
testWebui 界面自动化测试 |
使用robotframework进行界面自动化测试 | 无 | 是否启用 (enable)异常是否继续执行 (ignoreError)超时设置 (timeout)重试设置 (retry)测试用例通过百分比 (passingRate)忽略执行的模块名 (ignoreExecuteModuleNames) |
testPerformance 性能自动化测试 |
使用jmeter进行界面自动化测试 | 无 | 是否启用 (enable)异常是否继续执行 (ignoreError)超时设置 (timeout)重试设置 (retry)测试用例通过百分比 (passingRate)忽略执行的模块名 (ignoreExecuteModuleNames) |
input 等待输入 |
在部署到生产环境之前是否需要在流水线上进行人工确认 | 无 | 是否启用 (enable)步骤执行前需要API接口确认 (isApiOnly) |
模块构建定义
- 模块构建定义主要用于设置
build
(编译构建代码)步骤如何编译源代码
- 详细模块构建定义
|
|
模块镜像打包定义
- 模块镜像打包定义主要用于设置
packageImage
(镜像打包上传)步骤如何把编译的制品打包成容器镜像,并推送到镜像仓库- 重点需要关注
来源构建模块(relatedBuilds)
,该参数表示需要哪些构建模块先执行编译构建才能打包本模块的容器镜像,注意这里支持多个来源构建模块
- 详细模块镜像打包定义
|
|
模块容器部署定义
- 模块镜像打包定义主要用于设置
deploy
(容器应用部署)步骤如何把容器镜像部署到k8s- 重点需要关注
来源镜像打包模块(relatedPackage)
,该参数表示使用哪个镜像打包模块生成的镜像进行k8s部署
- 详细模块容器部署定义
|
|