update task udpate

This commit is contained in:
yumaojun03 2025-04-06 15:49:57 +08:00
parent 2f9d40a681
commit 348391cd81
2 changed files with 82 additions and 0 deletions

View File

@ -10,5 +10,6 @@ import (
// mcube // mcube
func main() { func main() {
cmd.Start() cmd.Start()
} }

View File

@ -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)
}
}
```