diff --git a/devcloud-mini/cmdb/main.go b/devcloud-mini/cmdb/main.go index aea4d1f..098bbb5 100644 --- a/devcloud-mini/cmdb/main.go +++ b/devcloud-mini/cmdb/main.go @@ -10,5 +10,6 @@ import ( // mcube func main() { + cmd.Start() } diff --git a/devcloud-mini/mflow/flow.md b/devcloud-mini/mflow/flow.md index 00d85f8..3e80f69 100644 --- a/devcloud-mini/mflow/flow.md +++ b/devcloud-mini/mflow/flow.md @@ -107,4 +107,85 @@ func (i *impl) RunJob(ctx context.Context, in *pipeline.Task) ( ## 任务状态更新 +```go +// 更新Job状态 +func (i *impl) UpdateJobTaskStatus(ctx context.Context, in *task.UpdateJobTaskStatusRequest) ( + *task.JobTask, error) { + ins, err := i.DescribeJobTask(ctx, task.NewDescribeJobTaskRequest(in.Id)) + if err != nil { + return nil, err + } + // 校验更新合法性 + err = i.CheckAllowUpdate(ctx, ins, in.UpdateToken, in.ForceUpdateStatus) + if err != nil { + return nil, err + } + + i.log.Debug().Msgf("更新任务状态: %s,当前状态: %s, 更新状态: %s", + ins.Spec.TaskId, ins.Status.Stage, in.Stage) + // 状态更新 + ins.Status.UpdateStatus(in) + + // 更新数据库 + if err := i.updateJobTaskStatus(ctx, ins); err != nil { + return nil, err + } + + // Job Task状态变更回调 + i.JobTaskStatusChangedCallback(ctx, ins) + + // Pipeline Task 状态变更回调 + if ins.Spec.PipelineTask != "" { + // 如果状态未变化, 不触发流水线更新 + if !in.ForceTriggerPipeline && !ins.Status.Changed { + i.log.Debug().Msgf("task %s status not changed: [%s], skip update pipeline", in.Id, in.Stage) + return ins, nil + } + _, err := i.PipelineTaskStatusChanged(ctx, ins) + if err != nil { + return nil, err + } + } + return ins, nil +} + +func (i *impl) JobTaskStatusChangedCallback(ctx context.Context, in *task.JobTask) { + // 状态未变化不通知 + if in.Status == nil { + return + } + + // 状态未变化不通知 + if !in.Status.Changed { + i.log.Debug().Msgf("task %s status not changed [%s], skip status callback", in.Spec.TaskId, in.Status.Stage) + return + } + i.log.Debug().Msgf("task %s 执行状态变化回调...", in.Spec.TaskId) + + // 个人通知 + for index := range in.Spec.MentionUsers { + mu := in.Spec.MentionUsers[index] + i.TaskMention(ctx, mu, in) + } + if len(in.Spec.MentionUsers) > 0 { + i.updateJobTaskMentionUser(ctx, in.Spec.TaskId, in.Spec.MentionUsers) + } + + // 群组通知 + imRobotHooks := in.Spec.MatchedImRobotNotify(in.Status.Stage.String()) + i.log.Debug().Msgf("task %s 群组通知: %v", in.Spec.TaskId, imRobotHooks) + i.hook.SendTaskStatus(ctx, imRobotHooks, in) + if len(imRobotHooks) > 0 { + i.updateJobTaskImRobotNotify(ctx, in.Spec.TaskId, imRobotHooks) + } + + // WebHook回调 + webhooks := in.Spec.MatchedWebHooks(in.Status.Stage.String()) + i.log.Debug().Msgf("task %s WebHook通知: %v", in.Spec.TaskId, webhooks) + i.hook.SendTaskStatus(ctx, webhooks, in) + if len(webhooks) > 0 { + i.updateJobTaskWebHook(ctx, in.Spec.TaskId, webhooks) + } +} +``` \ No newline at end of file