From 9189903cb47891d0eb75bc2ab23cfa061c451afe Mon Sep 17 00:00:00 2001 From: zhatiai <86452931+zhatiai@users.noreply.github.com> Date: Tue, 22 Aug 2023 16:04:27 +0800 Subject: [PATCH] merge custom and release workflow (#2971) * merge custom and release workflow Signed-off-by: zhatiai * init general job spec Signed-off-by: zhatiai --------- Signed-off-by: zhatiai Co-authored-by: zhatiai --- pkg/cli/upgradeassistant/cmd/migrate/1190.go | 27 + .../repository/mongodb/workflow_template.go | 5 +- .../aslan/core/templatestore/service/types.go | 47 + .../core/templatestore/service/workflow.go | 831 +++++++++++++----- 4 files changed, 699 insertions(+), 211 deletions(-) create mode 100644 pkg/microservice/aslan/core/templatestore/service/types.go diff --git a/pkg/cli/upgradeassistant/cmd/migrate/1190.go b/pkg/cli/upgradeassistant/cmd/migrate/1190.go index db8d7b0e9..8b51ea969 100644 --- a/pkg/cli/upgradeassistant/cmd/migrate/1190.go +++ b/pkg/cli/upgradeassistant/cmd/migrate/1190.go @@ -17,8 +17,10 @@ package migrate import ( + "context" "fmt" + "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" "github.com/koderover/zadig/pkg/cli/upgradeassistant/internal/upgradepath" @@ -41,6 +43,12 @@ func V1180ToV1190() error { return err } + log.Infof("-------- start migrate workflow template --------") + if err := migrateWorkflowTemplate(); err != nil { + log.Infof("migrateWorkflowTemplate err: %v", err) + return err + } + return nil } @@ -100,3 +108,22 @@ func migrateClusterScheduleStrategy() error { } return nil } + +var oldWorkflowTemplates = []string{ + "业务变更及测试", "数据库及业务变更", "多环境服务变更", "多阶段灰度", "istio发布", "Nacos 配置变更及服务升级", "Apollo 配置变更及服务升级", +} + +func migrateWorkflowTemplate() error { + // delete old templates + for _, name := range oldWorkflowTemplates { + query := bson.M{ + "template_name": name, + "created_by": setting.SystemUser, + } + _, err := mongodb.NewWorkflowV4TemplateColl().DeleteOne(context.TODO(), query) + if err != nil { + return fmt.Errorf("failed to delete old workflow template %s, err: %v", name, err) + } + } + return nil +} diff --git a/pkg/microservice/aslan/core/common/repository/mongodb/workflow_template.go b/pkg/microservice/aslan/core/common/repository/mongodb/workflow_template.go index 3bb075656..7bc757424 100644 --- a/pkg/microservice/aslan/core/common/repository/mongodb/workflow_template.go +++ b/pkg/microservice/aslan/core/common/repository/mongodb/workflow_template.go @@ -38,6 +38,7 @@ type WorkflowTemplateQueryOption struct { } type WorkflowTemplateListOption struct { + CreatedBy string Category string ExcludeBuildIn bool } @@ -124,8 +125,10 @@ func (c *WorkflowV4TemplateColl) Find(opt *WorkflowTemplateQueryOption) (*models func (c *WorkflowV4TemplateColl) List(option *WorkflowTemplateListOption) ([]*models.WorkflowV4Template, error) { resp := make([]*models.WorkflowV4Template, 0) - query := bson.M{} + if option.CreatedBy != "" { + query["create_by"] = option.CreatedBy + } if option.Category != "" { query["category"] = option.Category } diff --git a/pkg/microservice/aslan/core/templatestore/service/types.go b/pkg/microservice/aslan/core/templatestore/service/types.go new file mode 100644 index 000000000..8661e5417 --- /dev/null +++ b/pkg/microservice/aslan/core/templatestore/service/types.go @@ -0,0 +1,47 @@ +/* +Copyright 2023 The KodeRover Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package service + +import ( + "go.mongodb.org/mongo-driver/bson/primitive" + + "github.com/koderover/zadig/pkg/setting" +) + +type WorkflowtemplatePreView struct { + ID primitive.ObjectID `json:"id"` + TemplateName string `json:"template_name"` + CreateBy string `json:"create_by"` + CreateTime int64 `json:"create_time"` + UpdateBy string `json:"update_by"` + UpdateTime int64 `json:"update_time"` + Stages []string `json:"stages"` + StageDetails []*WorkflowTemplateStage `json:"stage_details"` + Description string `json:"description"` + Category setting.WorkflowCategory `json:"category"` + BuildIn bool `json:"build_in"` +} + +type WorkflowTemplateStage struct { + Name string `json:"name"` + Jobs []*WorkflowTemplateJob `json:"jobs"` +} + +type WorkflowTemplateJob struct { + Name string `json:"name"` + JobType string `json:"job_type"` +} diff --git a/pkg/microservice/aslan/core/templatestore/service/workflow.go b/pkg/microservice/aslan/core/templatestore/service/workflow.go index 43f5093a0..e5e6af35a 100644 --- a/pkg/microservice/aslan/core/templatestore/service/workflow.go +++ b/pkg/microservice/aslan/core/templatestore/service/workflow.go @@ -21,7 +21,6 @@ import ( "regexp" "time" - "go.mongodb.org/mongo-driver/bson/primitive" "go.uber.org/zap" "github.com/koderover/zadig/pkg/microservice/aslan/config" @@ -31,20 +30,9 @@ import ( "github.com/koderover/zadig/pkg/setting" e "github.com/koderover/zadig/pkg/tool/errors" "github.com/koderover/zadig/pkg/tool/log" + steptypes "github.com/koderover/zadig/pkg/types/step" ) -type WorkflowtemplatePreView struct { - ID primitive.ObjectID `json:"id"` - TemplateName string `json:"template_name"` - UpdateTime int64 `json:"update_time"` - CreateTime int64 `json:"create_time"` - UpdateBy string `json:"update_by,omitempty"` - Stages []string `json:"stages"` - Description string `json:"description"` - Category setting.WorkflowCategory `json:"category"` - BuildIn bool `json:"build_in"` -} - func CreateWorkflowTemplate(userName string, template *commonmodels.WorkflowV4Template, logger *zap.SugaredLogger) error { if _, err := commonrepo.NewWorkflowV4TemplateColl().Find(&commonrepo.WorkflowTemplateQueryOption{Name: template.TemplateName}); err == nil { errMsg := fmt.Sprintf("工作流模板名称: %s 已存在", template.TemplateName) @@ -124,13 +112,31 @@ func ListWorkflowTemplate(category string, excludeBuildIn bool, logger *zap.Suga } stages = append(stages, stage.Name) } + + stageDetails := make([]*WorkflowTemplateStage, 0) + for _, stage := range template.Stages { + stageDetail := &WorkflowTemplateStage{ + Name: stage.Name, + Jobs: make([]*WorkflowTemplateJob, 0), + } + for _, job := range stage.Jobs { + stageDetail.Jobs = append(stageDetail.Jobs, &WorkflowTemplateJob{ + Name: job.Name, + JobType: string(job.JobType), + }) + } + stageDetails = append(stageDetails, stageDetail) + } + resp = append(resp, &WorkflowtemplatePreView{ ID: template.ID, TemplateName: template.TemplateName, UpdateTime: template.UpdateTime, CreateTime: template.CreateTime, + CreateBy: template.CreatedBy, UpdateBy: template.UpdatedBy, Stages: stages, + StageDetails: stageDetails, Description: template.Description, Category: template.Category, BuildIn: template.BuildIn, @@ -206,10 +212,11 @@ func InitWorkflowTemplate() { func InitWorkflowTemplateInfos() []*commonmodels.WorkflowV4Template { buildInWorkflowTemplateInfos := []*commonmodels.WorkflowV4Template{ + // deploy service { - TemplateName: "业务变更及测试", + TemplateName: "单环境多服务更新", BuildIn: true, - Description: "支持多个服务并行构建、部署、测试过程", + Description: "支持多个服务并行构建、部署过程", Stages: []*commonmodels.WorkflowStage{ { Name: "构建", @@ -237,95 +244,13 @@ func InitWorkflowTemplateInfos() []*commonmodels.WorkflowV4Template { }, }, }, - { - Name: "测试", - Parallel: true, - Jobs: []*commonmodels.Job{ - { - Name: "test", - JobType: config.JobZadigTesting, - Spec: commonmodels.ZadigTestingJobSpec{}, - }, - }, - }, }, }, { - TemplateName: "数据库及业务变更", - Description: "支持自动化执行 MySQL 数据变更以及多服务并行构建、部署过程", + TemplateName: "多环境多服务更新", BuildIn: true, + Description: "支持一次构建部署多个环境", Stages: []*commonmodels.WorkflowStage{ - { - Name: "MySQL 变更", - Jobs: []*commonmodels.Job{ - { - Name: "mysql-update", - JobType: config.JobPlugin, - Spec: commonmodels.PluginJobSpec{ - Properties: &commonmodels.JobProperties{ - Timeout: 10, - ResourceRequest: setting.MinRequest, - }, - Plugin: &commonmodels.PluginTemplate{ - Name: "MySQL 数据库变更", - IsOffical: true, - Description: "针对 MySQL 数据库执行 SQL 变量", - Version: "v0.0.1", - Image: "koderover.tencentcloudcr.com/koderover-public/mysql-runner:v0.0.1", - Envs: []*commonmodels.Env{ - { - Name: "MYSQL_HOST", - Value: "$(inputs.mysql_host)", - }, - { - Name: "MYSQL_PORT", - Value: "$(inputs.mysql_port)", - }, - { - Name: "USERNAME", - Value: "$(inputs.username)", - }, - { - Name: "PASSWORD", - Value: "$(inputs.password)", - }, - { - Name: "QUERY", - Value: "$(inputs.query)", - }, - }, - Inputs: []*commonmodels.Param{ - { - Name: "mysql_host", - Description: "mysql host", - ParamsType: "string", - }, - { - Name: "mysql_port", - Description: "mysql port", - ParamsType: "string", - }, - { - Name: "username", - Description: "mysql username", - ParamsType: "string", - }, - { - Name: "password", - Description: "mysql password", - ParamsType: "string", - }, - { - Name: "query", - Description: "query to be used", - ParamsType: "string", - }, - }, - }, - }, - }, - }, - }, { Name: "构建", Parallel: true, @@ -338,11 +263,11 @@ func InitWorkflowTemplateInfos() []*commonmodels.WorkflowV4Template { }, }, { - Name: "部署", + Name: "部署环境 dev", Parallel: true, Jobs: []*commonmodels.Job{ { - Name: "deploy", + Name: "deploy-env-dev", JobType: config.JobZadigDeploy, Spec: commonmodels.ZadigDeployJobSpec{ DeployContents: []config.DeployContent{config.DeployImage}, @@ -352,64 +277,65 @@ func InitWorkflowTemplateInfos() []*commonmodels.WorkflowV4Template { }, }, }, - }, - }, - { - TemplateName: "多环境服务变更", - BuildIn: true, - Description: "支持一次构建部署多个环境", - Stages: []*commonmodels.WorkflowStage{ { - Name: "构建", + Name: "镜像分发", Parallel: true, Jobs: []*commonmodels.Job{ { - Name: "build", - JobType: config.JobZadigBuild, - Spec: commonmodels.ZadigBuildJobSpec{}, + Name: "image-distribute", + JobType: config.JobZadigDistributeImage, + Spec: commonmodels.ZadigDistributeImageJobSpec{ + Source: config.SourceFromJob, + JobName: "build", + }, }, }, }, { - Name: "部署环境1", + Name: "部署环境 qa", Parallel: true, Jobs: []*commonmodels.Job{ { - Name: "deploy-env-1", + Name: "deploy-env-qa", JobType: config.JobZadigDeploy, Spec: commonmodels.ZadigDeployJobSpec{ DeployContents: []config.DeployContent{config.DeployImage}, Source: config.SourceFromJob, - JobName: "build", + JobName: "image-distribute", }, }, }, }, + }, + }, + { + TemplateName: "上线服务", + BuildIn: true, + Description: "支持通过工作流上线服务", + Stages: []*commonmodels.WorkflowStage{ { - Name: "镜像分发", + Name: "部署", Parallel: true, Jobs: []*commonmodels.Job{ { - Name: "image-distribute", - JobType: config.JobZadigDistributeImage, - Spec: commonmodels.ZadigDistributeImageJobSpec{ - Source: config.SourceFromJob, - JobName: "build", + Name: "deploy", + JobType: config.JobZadigDeploy, + Spec: commonmodels.ZadigDeployJobSpec{ + DeployContents: []config.DeployContent{config.DeployImage, config.DeployVars, config.DeployConfig}, + Source: config.SourceRuntime, }, }, }, }, { - Name: "部署环境2", + Name: "测试", Parallel: true, Jobs: []*commonmodels.Job{ { - Name: "deploy-env-2", - JobType: config.JobZadigDeploy, - Spec: commonmodels.ZadigDeployJobSpec{ - DeployContents: []config.DeployContent{config.DeployImage}, - Source: config.SourceFromJob, - JobName: "image-distribute", + Name: "test", + JobType: config.JobZadigTesting, + Spec: commonmodels.ZadigTestingJobSpec{ + TestType: " ", }, }, }, @@ -417,29 +343,38 @@ func InitWorkflowTemplateInfos() []*commonmodels.WorkflowV4Template { }, }, { - TemplateName: "Nacos 配置及业务变更", + TemplateName: "下线服务", BuildIn: true, - Description: "支持自动化执行 nacos 配置变更", + Description: "支持通过工作流下线服务", Stages: []*commonmodels.WorkflowStage{ { - Name: "构建", + Name: "下线服务", Parallel: true, Jobs: []*commonmodels.Job{ { - Name: "build", - JobType: config.JobZadigBuild, - Spec: commonmodels.ZadigBuildJobSpec{}, + Name: "offline-service", + JobType: config.JobOfflineService, + Spec: commonmodels.JobTaskOfflineServiceSpec{}, }, }, }, + }, + }, + + // test and security + { + TemplateName: "API 测试", + BuildIn: true, + Description: "支持自动化执行服务级别 API 测试", + Stages: []*commonmodels.WorkflowStage{ { - Name: "Nacos 配置变更", + Name: "构建", Parallel: true, Jobs: []*commonmodels.Job{ { - Name: "nacos-update", - JobType: config.JobNacos, - Spec: commonmodels.NacosJobSpec{}, + Name: "build", + JobType: config.JobZadigBuild, + Spec: commonmodels.ZadigBuildJobSpec{}, }, }, }, @@ -458,12 +393,25 @@ func InitWorkflowTemplateInfos() []*commonmodels.WorkflowV4Template { }, }, }, + { + Name: "API 测试", + Parallel: true, + Jobs: []*commonmodels.Job{ + { + Name: "test", + JobType: config.JobZadigTesting, + Spec: commonmodels.ZadigTestingJobSpec{ + TestType: config.ServiceTestType, + }, + }, + }, + }, }, }, { - TemplateName: "Apollo 配置及业务变更", + TemplateName: "E2E 测试", BuildIn: true, - Description: "支持自动化执行 apollo 配置变更", + Description: "支持自动化执行产品级别 E2E 测试", Stages: []*commonmodels.WorkflowStage{ { Name: "构建", @@ -476,17 +424,6 @@ func InitWorkflowTemplateInfos() []*commonmodels.WorkflowV4Template { }, }, }, - { - Name: "Apollo 配置变更", - Parallel: true, - Jobs: []*commonmodels.Job{ - { - Name: "apollo-update", - JobType: config.JobApollo, - Spec: commonmodels.ApolloJobSpec{}, - }, - }, - }, { Name: "部署", Parallel: true, @@ -502,59 +439,100 @@ func InitWorkflowTemplateInfos() []*commonmodels.WorkflowV4Template { }, }, }, + { + Name: "E2E 测试", + Parallel: true, + Jobs: []*commonmodels.Job{ + { + Name: "test", + JobType: config.JobZadigTesting, + Spec: commonmodels.ZadigTestingJobSpec{ + TestType: config.ProductTestType, + }, + }, + }, + }, }, }, { - TemplateName: "JIRA 问题状态及业务变更", + TemplateName: "静态代码检测", BuildIn: true, - Description: "支持自动化执行 JIRA 问题状态变更", + Description: "支持自动化执行代码扫描和代码成分分析", Stages: []*commonmodels.WorkflowStage{ { - Name: "构建", + Name: "代码扫描", Parallel: true, Jobs: []*commonmodels.Job{ { - Name: "build", - JobType: config.JobZadigBuild, - Spec: commonmodels.ZadigBuildJobSpec{}, + Name: "code-scanning", + JobType: config.JobZadigScanning, + Spec: commonmodels.ZadigScanningJobSpec{}, }, }, }, { - Name: "部署", + Name: "成分分析", Parallel: true, Jobs: []*commonmodels.Job{ { - Name: "deploy", - JobType: config.JobZadigDeploy, - Spec: commonmodels.ZadigDeployJobSpec{ - DeployContents: []config.DeployContent{config.DeployImage}, - Source: config.SourceFromJob, - JobName: "build", + Name: "code-analyse", + JobType: config.JobFreestyle, + Spec: commonmodels.FreestyleJobSpec{ + Properties: &commonmodels.JobProperties{ + Timeout: 60, + ResourceRequest: "low", + ResReqSpec: setting.LowRequestSpec, + BuildOS: "focal", + ImageFrom: "koderover", + ImageID: "623d776ad26582d37d5a1aed", + CacheEnable: true, + CacheDirType: "workspace", + }, + Steps: []*commonmodels.Step{ + { + Name: "tools", + StepType: config.StepTools, + Spec: &steptypes.StepToolInstallSpec{}, + }, + { + Name: "git", + StepType: config.StepGit, + Spec: &steptypes.StepGitSpec{}, + }, + { + Name: "shell", + StepType: config.StepShell, + Spec: &steptypes.StepShellSpec{ + Script: "#!/bin/bash\nset -e", + }, + }, + }, }, }, }, }, { - Name: "测试", + Name: "构建", Parallel: true, Jobs: []*commonmodels.Job{ { - Name: "test", - JobType: config.JobZadigTesting, - Spec: commonmodels.ZadigTestingJobSpec{}, + Name: "build", + JobType: config.JobZadigBuild, + Spec: commonmodels.ZadigBuildJobSpec{}, }, }, }, { - Name: "JIRA 问题状态变更", + Name: "部署", Parallel: true, Jobs: []*commonmodels.Job{ { - Name: "jira-update", - JobType: config.JobJira, - Spec: commonmodels.JiraJobSpec{ - Source: setting.VariableSourceRuntime, + Name: "deploy", + JobType: config.JobZadigDeploy, + Spec: commonmodels.ZadigDeployJobSpec{ + DeployContents: []config.DeployContent{config.DeployImage}, + Source: config.SourceFromJob, + JobName: "build", }, }, }, @@ -562,9 +540,9 @@ func InitWorkflowTemplateInfos() []*commonmodels.WorkflowV4Template { }, }, { - TemplateName: "飞书工作项状态及业务变更", + TemplateName: "动态安全检测", BuildIn: true, - Description: "支持自动化执行飞书工作项状态变更", + Description: "支持自动化执行服务动态安全检测", Stages: []*commonmodels.WorkflowStage{ { Name: "构建", @@ -593,34 +571,57 @@ func InitWorkflowTemplateInfos() []*commonmodels.WorkflowV4Template { }, }, { - Name: "测试", + Name: "动态安全检测", Parallel: true, Jobs: []*commonmodels.Job{ { Name: "test", JobType: config.JobZadigTesting, - Spec: commonmodels.ZadigTestingJobSpec{}, + Spec: commonmodels.ZadigTestingJobSpec{ + TestType: " ", + }, }, }, }, + }, + }, + + // release + { + TemplateName: "Chart 实例化部署", + BuildIn: true, + Description: "支持自动化部署 Chart 仓库中已有的 Chart 到环境中(仅限 K8s Helm Chart 项目)", + Stages: []*commonmodels.WorkflowStage{ { - Name: "飞书工作项变更", + Name: "Chart 部署", Parallel: true, Jobs: []*commonmodels.Job{ { - Name: "lark-update", - JobType: config.JobMeegoTransition, - Spec: commonmodels.MeegoTransitionJobSpec{}, + Name: "deploy", + JobType: config.JobZadigHelmChartDeploy, + Spec: commonmodels.ZadigHelmChartDeployJobSpec{}, + }, + }, + }, + { + Name: "测试", + Parallel: true, + Jobs: []*commonmodels.Job{ + { + Name: "test", + JobType: config.JobZadigTesting, + Spec: commonmodels.ZadigTestingJobSpec{ + TestType: " ", + }, }, }, }, }, }, { - TemplateName: "多阶段灰度", + TemplateName: "多阶段灰度发布", Description: "支持自动化执行多阶段的灰度发布,结合人工审批,确保灰度过程可控", BuildIn: true, - Category: setting.ReleaseWorkflow, Stages: []*commonmodels.WorkflowStage{ { Name: "灰度20%", @@ -690,7 +691,6 @@ func InitWorkflowTemplateInfos() []*commonmodels.WorkflowV4Template { TemplateName: "蓝绿发布", Description: "支持自动化执行蓝绿发布,结合人工审批,确保蓝绿过程可控", BuildIn: true, - Category: setting.ReleaseWorkflow, Stages: []*commonmodels.WorkflowStage{ { Name: "蓝绿部署", @@ -706,6 +706,47 @@ func InitWorkflowTemplateInfos() []*commonmodels.WorkflowV4Template { }, }, }, + { + Name: "检查", + Parallel: true, + Jobs: []*commonmodels.Job{ + { + Name: "check", + JobType: config.JobFreestyle, + Spec: commonmodels.FreestyleJobSpec{ + Properties: &commonmodels.JobProperties{ + Timeout: 60, + ResourceRequest: "low", + ResReqSpec: setting.LowRequestSpec, + BuildOS: "focal", + ImageFrom: "koderover", + ImageID: "623d776ad26582d37d5a1aed", + CacheEnable: true, + CacheDirType: "workspace", + }, + Steps: []*commonmodels.Step{ + { + Name: "tools", + StepType: config.StepTools, + Spec: &steptypes.StepToolInstallSpec{}, + }, + { + Name: "git", + StepType: config.StepGit, + Spec: &steptypes.StepGitSpec{}, + }, + { + Name: "shell", + StepType: config.StepShell, + Spec: &steptypes.StepShellSpec{ + Script: "#!/bin/bash\nset -e", + }, + }, + }, + }, + }, + }, + }, { Name: "蓝绿发布", Parallel: true, @@ -734,7 +775,6 @@ func InitWorkflowTemplateInfos() []*commonmodels.WorkflowV4Template { TemplateName: "金丝雀发布", Description: "支持自动化执行金丝雀发布,结合人工审批,确保金丝雀发布过程可控", BuildIn: true, - Category: setting.ReleaseWorkflow, Stages: []*commonmodels.WorkflowStage{ { Name: "金丝雀部署", @@ -747,6 +787,47 @@ func InitWorkflowTemplateInfos() []*commonmodels.WorkflowV4Template { }, }, }, + { + Name: "检查", + Parallel: true, + Jobs: []*commonmodels.Job{ + { + Name: "check", + JobType: config.JobFreestyle, + Spec: commonmodels.FreestyleJobSpec{ + Properties: &commonmodels.JobProperties{ + Timeout: 60, + ResourceRequest: "low", + ResReqSpec: setting.LowRequestSpec, + BuildOS: "focal", + ImageFrom: "koderover", + ImageID: "623d776ad26582d37d5a1aed", + CacheEnable: true, + CacheDirType: "workspace", + }, + Steps: []*commonmodels.Step{ + { + Name: "tools", + StepType: config.StepTools, + Spec: &steptypes.StepToolInstallSpec{}, + }, + { + Name: "git", + StepType: config.StepGit, + Spec: &steptypes.StepGitSpec{}, + }, + { + Name: "shell", + StepType: config.StepShell, + Spec: &steptypes.StepShellSpec{ + Script: "#!/bin/bash\nset -e", + }, + }, + }, + }, + }, + }, + }, { Name: "金丝雀发布", Parallel: true, @@ -773,10 +854,9 @@ func InitWorkflowTemplateInfos() []*commonmodels.WorkflowV4Template { }, }, { - TemplateName: "istio发布", + TemplateName: "Isito 发布", Description: "支持 istio 灰度发布,结合人工审批,确保发布过程可控", BuildIn: true, - Category: setting.ReleaseWorkflow, Stages: []*commonmodels.WorkflowStage{ { Name: "istio 流量 20%", @@ -850,11 +930,209 @@ func InitWorkflowTemplateInfos() []*commonmodels.WorkflowV4Template { }, }, { - TemplateName: "Nacos 配置变更及服务升级", - Description: "支持自动化执行 nacos 配置变更和镜像更新", + TemplateName: "MSE 发布", + Description: "支持 MSE 发布,结合人工审批,确保发布过程可控", BuildIn: true, - Category: setting.ReleaseWorkflow, Stages: []*commonmodels.WorkflowStage{ + { + Name: "MSE 发布任务", + Parallel: true, + Approval: &commonmodels.Approval{ + Enabled: true, + Description: "Confirm to mse release", + Type: config.NativeApproval, + NativeApproval: &commonmodels.NativeApproval{ + Timeout: 60, + NeededApprovers: 1, + }, + }, + Jobs: []*commonmodels.Job{ + { + Name: "mse-release", + JobType: config.JobMseGrayRelease, + Spec: commonmodels.MseGrayReleaseJobSpec{}, + }, + }, + }, + { + Name: "检查", + Parallel: true, + Jobs: []*commonmodels.Job{ + { + Name: "check", + JobType: config.JobFreestyle, + Spec: commonmodels.FreestyleJobSpec{ + Properties: &commonmodels.JobProperties{ + Timeout: 60, + ResourceRequest: "low", + ResReqSpec: setting.LowRequestSpec, + BuildOS: "focal", + ImageFrom: "koderover", + ImageID: "623d776ad26582d37d5a1aed", + CacheEnable: true, + CacheDirType: "workspace", + }, + Steps: []*commonmodels.Step{ + { + Name: "tools", + StepType: config.StepTools, + Spec: &steptypes.StepToolInstallSpec{}, + }, + { + Name: "git", + StepType: config.StepGit, + Spec: &steptypes.StepGitSpec{}, + }, + { + Name: "shell", + StepType: config.StepShell, + Spec: &steptypes.StepShellSpec{ + Script: "#!/bin/bash\nset -e", + }, + }, + }, + }, + }, + }, + }, + }, + }, + + // project cooperation + { + TemplateName: "JIRA 问题状态及业务变更", + BuildIn: true, + Description: "支持自动化执行 JIRA 问题状态变更", + Stages: []*commonmodels.WorkflowStage{ + { + Name: "构建", + Parallel: true, + Jobs: []*commonmodels.Job{ + { + Name: "build", + JobType: config.JobZadigBuild, + Spec: commonmodels.ZadigBuildJobSpec{}, + }, + }, + }, + { + Name: "部署", + Parallel: true, + Jobs: []*commonmodels.Job{ + { + Name: "deploy", + JobType: config.JobZadigDeploy, + Spec: commonmodels.ZadigDeployJobSpec{ + DeployContents: []config.DeployContent{config.DeployImage}, + Source: config.SourceFromJob, + JobName: "build", + }, + }, + }, + }, + { + Name: "测试", + Parallel: true, + Jobs: []*commonmodels.Job{ + { + Name: "test", + JobType: config.JobZadigTesting, + Spec: commonmodels.ZadigTestingJobSpec{ + TestType: " ", + }, + }, + }, + }, + { + Name: "JIRA 问题状态变更", + Parallel: true, + Jobs: []*commonmodels.Job{ + { + Name: "jira-update", + JobType: config.JobJira, + Spec: commonmodels.JiraJobSpec{ + Source: setting.VariableSourceRuntime, + }, + }, + }, + }, + }, + }, + { + TemplateName: "飞书工作项状态及业务变更", + BuildIn: true, + Description: "支持自动化执行飞书工作项状态变更", + Stages: []*commonmodels.WorkflowStage{ + { + Name: "构建", + Parallel: true, + Jobs: []*commonmodels.Job{ + { + Name: "build", + JobType: config.JobZadigBuild, + Spec: commonmodels.ZadigBuildJobSpec{}, + }, + }, + }, + { + Name: "部署", + Parallel: true, + Jobs: []*commonmodels.Job{ + { + Name: "deploy", + JobType: config.JobZadigDeploy, + Spec: commonmodels.ZadigDeployJobSpec{ + DeployContents: []config.DeployContent{config.DeployImage}, + Source: config.SourceFromJob, + JobName: "build", + }, + }, + }, + }, + { + Name: "测试", + Parallel: true, + Jobs: []*commonmodels.Job{ + { + Name: "test", + JobType: config.JobZadigTesting, + Spec: commonmodels.ZadigTestingJobSpec{ + TestType: " ", + }, + }, + }, + }, + { + Name: "飞书工作项变更", + Parallel: true, + Jobs: []*commonmodels.Job{ + { + Name: "lark-update", + JobType: config.JobMeegoTransition, + Spec: commonmodels.MeegoTransitionJobSpec{}, + }, + }, + }, + }, + }, + + // config update + { + TemplateName: "Nacos 配置及业务变更", + BuildIn: true, + Description: "支持自动化执行 Nacos 配置变更", + Stages: []*commonmodels.WorkflowStage{ + { + Name: "构建", + Parallel: true, + Jobs: []*commonmodels.Job{ + { + Name: "build", + JobType: config.JobZadigBuild, + Spec: commonmodels.ZadigBuildJobSpec{}, + }, + }, + }, { Name: "Nacos 配置变更", Parallel: true, @@ -867,14 +1145,16 @@ func InitWorkflowTemplateInfos() []*commonmodels.WorkflowV4Template { }, }, { - Name: "Kubernetes 部署", + Name: "部署", Parallel: true, Jobs: []*commonmodels.Job{ { - Name: "k8s-deploy", - JobType: config.JobCustomDeploy, - Spec: commonmodels.CustomDeployJobSpec{ - Timeout: 10, + Name: "deploy", + JobType: config.JobZadigDeploy, + Spec: commonmodels.ZadigDeployJobSpec{ + DeployContents: []config.DeployContent{config.DeployImage}, + Source: config.SourceFromJob, + JobName: "build", }, }, }, @@ -882,31 +1162,149 @@ func InitWorkflowTemplateInfos() []*commonmodels.WorkflowV4Template { }, }, { - TemplateName: "Apollo 配置变更及服务升级", - Description: "支持自动化执行 apollo 配置变更和镜像更新", + TemplateName: "Apollo 配置及业务变更", BuildIn: true, - Category: setting.ReleaseWorkflow, + Description: "支持自动化执行 Apollo 配置变更", Stages: []*commonmodels.WorkflowStage{ + { + Name: "构建", + Parallel: true, + Jobs: []*commonmodels.Job{ + { + Name: "build", + JobType: config.JobZadigBuild, + Spec: commonmodels.ZadigBuildJobSpec{}, + }, + }, + }, { Name: "Apollo 配置变更", Parallel: true, Jobs: []*commonmodels.Job{ { - Name: "appllo-update", + Name: "apollo-update", JobType: config.JobApollo, Spec: commonmodels.ApolloJobSpec{}, }, }, }, { - Name: "Kubernetes 部署", + Name: "部署", + Parallel: true, + Jobs: []*commonmodels.Job{ + { + Name: "deploy", + JobType: config.JobZadigDeploy, + Spec: commonmodels.ZadigDeployJobSpec{ + DeployContents: []config.DeployContent{config.DeployImage}, + Source: config.SourceFromJob, + JobName: "build", + }, + }, + }, + }, + }, + }, + + // data update + { + TemplateName: "MySQL 数据库及业务变更", + Description: "支持自动化执行 MySQL 数据变更以及多服务并行构建、部署过程", + BuildIn: true, + Stages: []*commonmodels.WorkflowStage{ + { + Name: "MySQL 变更", + Jobs: []*commonmodels.Job{ + { + Name: "mysql-update", + JobType: config.JobPlugin, + Spec: commonmodels.PluginJobSpec{ + Properties: &commonmodels.JobProperties{ + Timeout: 10, + ResourceRequest: setting.MinRequest, + }, + Plugin: &commonmodels.PluginTemplate{ + Name: "MySQL 数据库变更", + IsOffical: true, + Description: "针对 MySQL 数据库执行 SQL 变量", + Version: "v0.0.1", + Image: "koderover.tencentcloudcr.com/koderover-public/mysql-runner:v0.0.1", + Envs: []*commonmodels.Env{ + { + Name: "MYSQL_HOST", + Value: "$(inputs.mysql_host)", + }, + { + Name: "MYSQL_PORT", + Value: "$(inputs.mysql_port)", + }, + { + Name: "USERNAME", + Value: "$(inputs.username)", + }, + { + Name: "PASSWORD", + Value: "$(inputs.password)", + }, + { + Name: "QUERY", + Value: "$(inputs.query)", + }, + }, + Inputs: []*commonmodels.Param{ + { + Name: "mysql_host", + Description: "mysql host", + ParamsType: "string", + }, + { + Name: "mysql_port", + Description: "mysql port", + ParamsType: "string", + }, + { + Name: "username", + Description: "mysql username", + ParamsType: "string", + }, + { + Name: "password", + Description: "mysql password", + ParamsType: "string", + }, + { + Name: "query", + Description: "query to be used", + ParamsType: "string", + }, + }, + }, + }, + }, + }, + }, + { + Name: "构建", + Parallel: true, + Jobs: []*commonmodels.Job{ + { + Name: "build", + JobType: config.JobZadigBuild, + Spec: commonmodels.ZadigBuildJobSpec{}, + }, + }, + }, + { + Name: "部署", Parallel: true, Jobs: []*commonmodels.Job{ { - Name: "k8s-deploy", - JobType: config.JobCustomDeploy, - Spec: commonmodels.CustomDeployJobSpec{ - Timeout: 10, + Name: "deploy", + JobType: config.JobZadigDeploy, + Spec: commonmodels.ZadigDeployJobSpec{ + DeployContents: []config.DeployContent{config.DeployImage}, + Source: config.SourceFromJob, + JobName: "build", }, }, }, @@ -915,7 +1313,7 @@ func InitWorkflowTemplateInfos() []*commonmodels.WorkflowV4Template { }, { TemplateName: "DMS 数据变更及服务升级", - Description: "支持自动化创建并跟踪 DMS 数据变更工单和镜像更新", + Description: "支持自动化创建并跟踪 DMS 数据变更工单以及多服务并行构建、部署过程", BuildIn: true, Category: setting.ReleaseWorkflow, Stages: []*commonmodels.WorkflowStage{ @@ -1003,14 +1401,27 @@ func InitWorkflowTemplateInfos() []*commonmodels.WorkflowV4Template { }, }, { - Name: "Kubernetes 部署", + Name: "构建", + Parallel: true, + Jobs: []*commonmodels.Job{ + { + Name: "build", + JobType: config.JobZadigBuild, + Spec: commonmodels.ZadigBuildJobSpec{}, + }, + }, + }, + { + Name: "部署", Parallel: true, Jobs: []*commonmodels.Job{ { - Name: "k8s-deploy", - JobType: config.JobCustomDeploy, - Spec: commonmodels.CustomDeployJobSpec{ - Timeout: 10, + Name: "deploy", + JobType: config.JobZadigDeploy, + Spec: commonmodels.ZadigDeployJobSpec{ + DeployContents: []config.DeployContent{config.DeployImage}, + Source: config.SourceFromJob, + JobName: "build", }, }, }, -- GitLab