func Deploy2
2021-11-24 18:58:53 6 举报
AI智能生成
部署流程
作者其他创作
大纲/内容
1. 传入DeployInput参数
2. 从Context中获取用户信息
3. 调用shortcuts/app.go中GetAppOrErr,从数据库中查询应用信息,返回app
4. 获取app setting,包含灰度发布比例、部署方式等信息<br>
5. Online环境,进行检查JIRA Status (app的ReleaseApprovalNeedJiraID为true)
jira.CheckIsJIRAStatusCanRelease<br>
jira.GetJIRAInfoFromJIRAID<br>
HTTP GET<br>
6. 检查appCommit
7. 检查权限<br>
app.CanModifyAppWithStage调用app.GetAppUserRoleWithStage<br>获取role,判断是否有权限。筛选符合owner、master或admin的
modes/app.go中自己定义了Admin struct,提供方法TableName返回了adminstrator
8. 获取namespace,然后验证namespace
根据context中的env,指定ns<br>(dev/online/stage/custome-test/text-xxxx环境)<br><br>
online、dev
name
stage
automaticxxxstage-{name}
默认
通过name查询数据库<br>返回Stage.Namespace
验证namespace
online、dev
app的ns应与根据ctx获取的ns一致
stage
automaticxxxstage-{app的name}应于根据ctx获取的stage ns一致
默认
app的ns应与根据ctx获取的ns不一致
9. 部署包检查,根据DeploymentConfigID,获取deploy的config
校验云部署,<br>云部署应至少包含一个子模块
遍历config的mudule,<br>判断是否有appBuildConfigID、Image、CIConfigID
校验虚拟机部署<br>或虚拟机部署和云部署同时支持
根据appDeploymentConfigID<br>查询AppDeploymentServerModuleConfig
10.验证部署包,保证部署任务唯一(查询数据库,判断是否有正在执行部署的部署包、是否正在创建、删除实例)<br>如果上述情况,返回error
11. 根据context的Env确定k8s集群
12. 根据deployType确定deployMode<br>目前只支持快速部署和流程部署
根据deploy config确定本次部署Mode
获取app历史的部署方式
13. DeployTypeForPreview或DeployTypeForFast方式下,<br>获取上一次部署的deploymentName<br>
zealot/model/deployment.go<br>GetDeploymentsByLabel<br>
连接k8s集群
根据labels、namespace获取deploys
14. 创建新deploy实例,shortcuts.InitDeploymentConfig
1. GetAppOrErr,如果appId合法,则根据appID查询App;<br>否则,根据app的name、namespace查询
15. 构建新部署任务Model实例
16.保存部署包快照<br>shortcuts.SyncSaveConfigSnapshot<br>
1. 根据deployment.AppDeploymentConfig.ID(deploymentConfigID)查询[]AppDeploymentModuleConfig
2. 根据deploymentConfigID查询[]AppDeploymentServerModuleConfig
3. 遍历[]AppDeploymentModuleConfig
1.通过util.initSnapshot,<br>构建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<br>
env==online
kind==preview -> return preview
kind != preview -> return online
return dev
2)解析并遍历AppConfigSettingItem的<br>[]AppConfigSettingItemKey(ConfigKeys)<br><br>主要为了给config添加version
1. 确定configCenterPath<br>由AppConfigSettingItem中的ParentPath(配置中心父路径)与<br>ConfigKeys中的ChildrePath(配置中心子路径)<br><br>configCenterPath := item.ParentPath + "/" + keyInfo.ChildrenPath<br>
2. 根据configCenterPath和env从etcd中获取version<br>
etcd实际读取路径需要根据env进行判断<br>debug后补充
3. 根据version构建新的configKeys
3) 根据AppConfigSettingItem信息和带有Version的AppConfigSettingItemKeySnapshot信息,<br>构建并返回[]AppConfigSettingItemSnapshot
2. 更新snapshot
4.遍历[]AppDeploymentServerModuleConfig
17. 创建新部署任务,保存到数据库表<br>
18. 对deploy config(配置包)做hash<br>models.GetConfigHash<br>
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<br>同步
1. 获取私有环境部署包配置
每个人有自己的私有环境?
2. 遍历configs,执行AutoDeploy<br><b>自动同步</b>
根据configId获取config
构建deploy yaml清单
获取ns
构建deploy task 实例,并将实例数据保存到数据库
增加部署的历史记录
将最新的历史记录Id与DeployTask进行关联
shortcuts/deploy.go TODO: yaml渲染和环境强耦合,后期需要解耦合
shortcuts/deploy_process.go<br>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<br>AppOperationLog
DeployTaskMetricStore
0 条评论
下一页