fix: pre and post command execute #95
This commit is contained in:
+36
-18
@@ -506,10 +506,13 @@ func (a *Agent) handleTasks(data json.RawMessage) {
|
|||||||
|
|
||||||
func (a *Agent) handleExecute(data json.RawMessage) {
|
func (a *Agent) handleExecute(data json.RawMessage) {
|
||||||
var req struct {
|
var req struct {
|
||||||
TaskID string `json:"task_id"`
|
TaskID string `json:"task_id"`
|
||||||
LogID string `json:"log_id"`
|
LogID string `json:"log_id"`
|
||||||
Envs string `json:"envs"`
|
Envs string `json:"envs"`
|
||||||
Secrets []string `json:"secrets"`
|
Secrets []string `json:"secrets"`
|
||||||
|
Command string `json:"command"`
|
||||||
|
PreCommand string `json:"pre_command"`
|
||||||
|
PostCommand string `json:"post_command"`
|
||||||
}
|
}
|
||||||
if err := json.Unmarshal(data, &req); err != nil {
|
if err := json.Unmarshal(data, &req); err != nil {
|
||||||
logger.Errorf("解析立即执行请求失败: %v", err)
|
logger.Errorf("解析立即执行请求失败: %v", err)
|
||||||
@@ -527,26 +530,41 @@ func (a *Agent) handleExecute(data json.RawMessage) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 准备执行请求
|
// 准备执行请求
|
||||||
// 如果消息中携带了环境变量,则优先使用(通常由服务端解析好后推过来)
|
// 如果消息中携带了环境变量或指令,则优先使用(确保即时生效)
|
||||||
envs := task.Envs
|
envs := task.Envs
|
||||||
if req.Envs != "" {
|
if req.Envs != "" {
|
||||||
envs = req.Envs
|
envs = req.Envs
|
||||||
}
|
}
|
||||||
|
|
||||||
|
command := task.Command
|
||||||
|
if req.Command != "" {
|
||||||
|
command = req.Command
|
||||||
|
}
|
||||||
|
|
||||||
|
preCommand := task.PreCommand
|
||||||
|
if req.PreCommand != "" {
|
||||||
|
preCommand = req.PreCommand
|
||||||
|
}
|
||||||
|
|
||||||
|
postCommand := task.PostCommand
|
||||||
|
if req.PostCommand != "" {
|
||||||
|
postCommand = req.PostCommand
|
||||||
|
}
|
||||||
|
|
||||||
execReq := &executor.ExecutionRequest{
|
execReq := &executor.ExecutionRequest{
|
||||||
TaskID: task.ID,
|
TaskID: task.ID,
|
||||||
LogID: req.LogID,
|
LogID: req.LogID,
|
||||||
Name: task.Name,
|
Name: task.Name,
|
||||||
Command: task.Command,
|
Command: command,
|
||||||
PreCommand: task.PreCommand,
|
PreCommand: preCommand,
|
||||||
PostCommand: task.PostCommand,
|
PostCommand: postCommand,
|
||||||
WorkDir: task.WorkDir,
|
WorkDir: task.WorkDir,
|
||||||
Envs: executor.ParseEnvVars(envs),
|
Envs: executor.ParseEnvVars(envs),
|
||||||
Secrets: req.Secrets,
|
Secrets: req.Secrets,
|
||||||
Timeout: task.Timeout,
|
Timeout: task.Timeout,
|
||||||
Languages: task.Languages,
|
Languages: task.Languages,
|
||||||
UseMise: task.UseMise(),
|
UseMise: task.UseMise(),
|
||||||
Type: executor.TaskTypeManual,
|
Type: executor.TaskTypeManual,
|
||||||
}
|
}
|
||||||
|
|
||||||
// 立即执行任务(加入队列)
|
// 立即执行任务(加入队列)
|
||||||
|
|||||||
@@ -450,11 +450,13 @@ func (es *ExecutorService) ExecuteDispatcher(ctx context.Context, req *executor.
|
|||||||
// 系统任务(无 taskID)直接本地执行
|
// 系统任务(无 taskID)直接本地执行
|
||||||
if task == nil {
|
if task == nil {
|
||||||
return executor.Execute(ctx, executor.Request{
|
return executor.Execute(ctx, executor.Request{
|
||||||
Command: req.Command,
|
Command: req.Command,
|
||||||
WorkDir: req.WorkDir,
|
PreCommand: req.PreCommand,
|
||||||
Envs: req.Envs,
|
PostCommand: req.PostCommand,
|
||||||
Timeout: req.Timeout,
|
WorkDir: req.WorkDir,
|
||||||
UseMise: false, // 系统任务不使用 mise
|
Envs: req.Envs,
|
||||||
|
Timeout: req.Timeout,
|
||||||
|
UseMise: false, // 系统任务不使用 mise
|
||||||
}, stdout, stderr)
|
}, stdout, stderr)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -476,12 +478,14 @@ func (es *ExecutorService) ExecuteDispatcher(ctx context.Context, req *executor.
|
|||||||
// 本地任务
|
// 本地任务
|
||||||
hooks := &LocalTaskHooks{es: es, logID: req.LogID}
|
hooks := &LocalTaskHooks{es: es, logID: req.LogID}
|
||||||
return executor.ExecuteWithHooks(ctx, executor.Request{
|
return executor.ExecuteWithHooks(ctx, executor.Request{
|
||||||
Command: req.Command,
|
Command: req.Command,
|
||||||
WorkDir: req.WorkDir,
|
PreCommand: req.PreCommand,
|
||||||
Envs: req.Envs,
|
PostCommand: req.PostCommand,
|
||||||
Timeout: req.Timeout,
|
WorkDir: req.WorkDir,
|
||||||
Languages: []map[string]string(task.Languages),
|
Envs: req.Envs,
|
||||||
UseMise: req.UseMise, // 使用请求中的 UseMise 标志 (由调度器统一处理过)
|
Timeout: req.Timeout,
|
||||||
|
Languages: []map[string]string(task.Languages),
|
||||||
|
UseMise: req.UseMise, // 使用请求中的 UseMise 标志 (由调度器统一处理过)
|
||||||
}, stdout, stderr, hooks)
|
}, stdout, stderr, hooks)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1005,10 +1009,13 @@ func (es *ExecutorService) ExecuteRemoteForScheduler(task *models.Task, logID st
|
|||||||
|
|
||||||
// 3. 发送指令
|
// 3. 发送指令
|
||||||
err := es.agentWSManager.SendToAgent(agentID, constant.WSTypeExecute, map[string]interface{}{
|
err := es.agentWSManager.SendToAgent(agentID, constant.WSTypeExecute, map[string]interface{}{
|
||||||
"task_id": task.ID,
|
"task_id": task.ID,
|
||||||
"log_id": logID,
|
"log_id": logID,
|
||||||
"envs": envs,
|
"envs": envs,
|
||||||
"secrets": secrets,
|
"secrets": secrets,
|
||||||
|
"command": task.Command,
|
||||||
|
"pre_command": task.PreCommand,
|
||||||
|
"post_command": task.PostCommand,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("发送执行命令失败: %v", err)
|
return nil, fmt.Errorf("发送执行命令失败: %v", err)
|
||||||
|
|||||||
Reference in New Issue
Block a user