func Deploy2
2021-11-24 18:58:53 6 举报
AI智能生成
部署流程
作者其他创作
大纲/内容
1. 传入DeployInput参数
2. 从Context中获取用户信息
3. 调用shortcuts/app.go中GetAppOrErr,从数据库中查询应用信息,返回app
4. 获取app setting,包含灰度发布比例、部署方式等信息
5. Online环境,进行检查JIRA Status (app的ReleaseApprovalNeedJiraID为true)
jira.CheckIsJIRAStatusCanRelease
jira.GetJIRAInfoFromJIRAID
HTTP GET
6. 检查appCommit
7. 检查权限
app.CanModifyAppWithStage调用app.GetAppUserRoleWithStage
获取role,判断是否有权限。筛选符合owner、master或admin的
获取role,判断是否有权限。筛选符合owner、master或admin的
modes/app.go中自己定义了Admin struct,提供方法TableName返回了adminstrator
8. 获取namespace,然后验证namespace
根据context中的env,指定ns
(dev/online/stage/custome-test/text-xxxx环境)
(dev/online/stage/custome-test/text-xxxx环境)
online、dev
name
stage
automaticxxxstage-{name}
默认
通过name查询数据库
返回Stage.Namespace
返回Stage.Namespace
验证namespace
online、dev
app的ns应与根据ctx获取的ns一致
stage
automaticxxxstage-{app的name}应于根据ctx获取的stage ns一致
默认
app的ns应与根据ctx获取的ns不一致
9. 部署包检查,根据DeploymentConfigID,获取deploy的config
校验云部署,
云部署应至少包含一个子模块
云部署应至少包含一个子模块
遍历config的mudule,
判断是否有appBuildConfigID、Image、CIConfigID
判断是否有appBuildConfigID、Image、CIConfigID
校验虚拟机部署
或虚拟机部署和云部署同时支持
或虚拟机部署和云部署同时支持
根据appDeploymentConfigID
查询AppDeploymentServerModuleConfig
查询AppDeploymentServerModuleConfig
10.验证部署包,保证部署任务唯一(查询数据库,判断是否有正在执行部署的部署包、是否正在创建、删除实例)
如果上述情况,返回error
如果上述情况,返回error
11. 根据context的Env确定k8s集群
12. 根据deployType确定deployMode
目前只支持快速部署和流程部署
目前只支持快速部署和流程部署
根据deploy config确定本次部署Mode
获取app历史的部署方式
13. DeployTypeForPreview或DeployTypeForFast方式下,
获取上一次部署的deploymentName
获取上一次部署的deploymentName
zealot/model/deployment.go
GetDeploymentsByLabel
GetDeploymentsByLabel
连接k8s集群
根据labels、namespace获取deploys
14. 创建新deploy实例,shortcuts.InitDeploymentConfig
1. GetAppOrErr,如果appId合法,则根据appID查询App;
否则,根据app的name、namespace查询
否则,根据app的name、namespace查询
15. 构建新部署任务Model实例
16.保存部署包快照
shortcuts.SyncSaveConfigSnapshot
shortcuts.SyncSaveConfigSnapshot
1. 根据deployment.AppDeploymentConfig.ID(deploymentConfigID)查询[]AppDeploymentModuleConfig
2. 根据deploymentConfigID查询[]AppDeploymentServerModuleConfig
3. 遍历[]AppDeploymentModuleConfig
1.通过util.initSnapshot,
构建AppConfigSettingSnapshot的JSON串
构建AppConfigSettingSnapshot的JSON串
1.根据configSettingID查询AppConfigSetting(configSetting)
2. 构建AppConfigSettingSnapshot实例
3. 从DB中获取common的[]AppconfigSettingItem(commonItems)
4. saveConfigVersion
遍历common的[]AppConfigSettingItem
1)根据configSetting.Env和commonItem.Kind做比对。确定env
env==stage -> return stage
env==online
kind==preview -> return preview
kind != preview -> return online
return dev
2)解析并遍历AppConfigSettingItem的
[]AppConfigSettingItemKey(ConfigKeys)
主要为了给config添加version
[]AppConfigSettingItemKey(ConfigKeys)
主要为了给config添加version
1. 确定configCenterPath
由AppConfigSettingItem中的ParentPath(配置中心父路径)与
ConfigKeys中的ChildrePath(配置中心子路径)
configCenterPath := item.ParentPath + "/" + keyInfo.ChildrenPath
由AppConfigSettingItem中的ParentPath(配置中心父路径)与
ConfigKeys中的ChildrePath(配置中心子路径)
configCenterPath := item.ParentPath + "/" + keyInfo.ChildrenPath
2. 根据configCenterPath和env从etcd中获取version
etcd实际读取路径需要根据env进行判断
debug后补充
debug后补充
3. 根据version构建新的configKeys
3) 根据AppConfigSettingItem信息和带有Version的AppConfigSettingItemKeySnapshot信息,
构建并返回[]AppConfigSettingItemSnapshot
构建并返回[]AppConfigSettingItemSnapshot
2. 更新snapshot
4.遍历[]AppDeploymentServerModuleConfig
17. 创建新部署任务,保存到数据库表
18. 对deploy config(配置包)做hash
models.GetConfigHash
models.GetConfigHash
1. 根据AppDeploymentConfig.ID(deploymentConfigID),查询[]AppDeploymentModuleConfig
2.将配置数据configData置为空
3.遍历[]AppDeploymentModuleConfig
configData=configData+[]AppDeploymentModuleConfig.ID
4.调用函数sha1.Sum()对configData进行加密
5.返回加密后的结果
19. 保存部署历史记录
1. 构建AppDeployHistory实体实例
2. 数据库插入AppDeployHistory记录
20. 快速部署流程 shortcuts/deploy_process.go
FastDeployProcess
20.1 创建task
20.2 根据cluster、task、deployment数据构建process(部署子任务)
20.3 process.fire启动process
20.4 defer执行process资源清理
21. 记录部署日志信息
22. DeployTaskMetricStore存deploy task相关信息
return &DeployTaskSection
deploy resource
hasDomain
hasPreDomain
task
CloseDeployProcess.PostEventHook
生产环境 Online
func PostOnlineEventHook
deploy.SyncDeploy
同步
同步
1. 获取私有环境部署包配置
每个人有自己的私有环境?
2. 遍历configs,执行AutoDeploy
自动同步
自动同步
根据configId获取config
构建deploy yaml清单
获取ns
构建deploy task 实例,并将实例数据保存到数据库
增加部署的历史记录
将最新的历史记录Id与DeployTask进行关联
shortcuts/deploy.go TODO: yaml渲染和环境强耦合,后期需要解耦合
shortcuts/deploy_process.go
func AutoDeployProcess
func AutoDeployProcess
创建DeployTaskSection实例,并保存到数据库
process.Fire启动部署流程
defer CloseDeployProcess.FireNoSync资源关闭
1. closeTask
1. find deploy event,如果没有就创建一个新的event,并保存到数据库
2. 如果有event记录,则进行update,deployTask的status更新为Done
2. DB UpdateAppDeployHistoryYaml
开发环境 Dev
func PostDevEventHook【do nothing】
dbmodel.AppStore
dbmodel.AppSettingStore
dbmodel.AppCommitStore
adminstrator
dbmodel.StageStore
dbmodel.AppDeploymentConfigStore
app_deployment_server_module_config
dbmodel.DeployTaskStore
dbmodel.K8sResourceStore
dbmodel.App
dbmodel.AppDeploymentModuleConfigStore
dbmodel.AppConfigSettingStore
dbmodel.AppDeploymentServerModuleConfigStore
dbmodel.AppDeploymentModuleConfigStore
MYSQL
app
app_setting
app_commit
administrator
stage
阶段表
app_deployment_config
部署包
app_deployment_server_module_config
模块相关信息
deploy_task
部署任务
k8s_resource
k8s资源
app_deployment_module_config
模块相关信息
app_deployment_server_module_config
模块相关信息
app_config_setting
配置包设置
app_deploy_history
deploy_task_section
部署事件任务阶段
app_operation_log
deploy_task_metric
部署任务指标
AppDeployHistoryStore
DeployTaskSectionStore
models/operation.go
AppOperationLog
AppOperationLog
DeployTaskMetricStore
0 条评论
下一页