61 lines
1.6 KiB
Go
61 lines
1.6 KiB
Go
package tasks
|
|
|
|
import (
|
|
"context"
|
|
"devops/agent/script"
|
|
"time"
|
|
)
|
|
|
|
var (
|
|
// Task 运行器注册表
|
|
taskRunnerRegistry = make(map[string]TaskRunner)
|
|
)
|
|
|
|
func RegisterTaskRunner(name string, runner TaskRunner) {
|
|
taskRunnerRegistry[name] = runner
|
|
}
|
|
|
|
func GetTaskRunner(name string) TaskRunner {
|
|
return taskRunnerRegistry[name]
|
|
}
|
|
|
|
// Task 是一个接口,定义了任务的基本行为
|
|
// 任务名称: task_debug, 任务描述: 调试任务, 任务类型: debug, 任务参数: {}
|
|
type TaskRunner interface {
|
|
// 任务需要的运行能力
|
|
Run(context.Context, *RunTaskRequest) (*script.ExecutionResult, error)
|
|
}
|
|
|
|
func NewRunTaskRequest(workDir string, name string) *RunTaskRequest {
|
|
return &RunTaskRequest{
|
|
WorkDir: workDir,
|
|
Name: name,
|
|
InputParams: make(map[string]string),
|
|
}
|
|
}
|
|
|
|
type RunTaskRequest struct {
|
|
// 任务名称, 比如 "build", "deploy" 每一个名称 在Agent测有一个唯一的Task与之对应
|
|
Name string `json:"name"`
|
|
// 运行参数, 比如构建任务的代码分支、部署任务的目标环境等 作为环境变量传递给任务脚本执行
|
|
InputParams map[string]string `json:"input_params"`
|
|
// 工作目录, 任务执行过程中产生的文件都放在这个目录下, 由Agent负责清理
|
|
WorkDir string `json:"work_dir"`
|
|
// 任务超时时间, 0表示不超时
|
|
TimeoutSecond int64 `json:"timeout_second"`
|
|
}
|
|
|
|
func (r *RunTaskRequest) SetInputParams(key, value string) *RunTaskRequest {
|
|
r.InputParams[key] = value
|
|
return r
|
|
|
|
}
|
|
|
|
func (t *RunTaskRequest) GetTimeout() time.Duration {
|
|
if t.TimeoutSecond > 0 {
|
|
return time.Duration(t.TimeoutSecond) * time.Second
|
|
}
|
|
|
|
return time.Duration(60) * time.Minute
|
|
}
|