fix: pre and post command execute #95

This commit is contained in:
duorameng
2026-05-11 19:49:55 +08:00
parent 02fe448c0f
commit 97ab8d8927
2 changed files with 58 additions and 33 deletions
+22 -4
View File
@@ -510,6 +510,9 @@ func (a *Agent) handleExecute(data json.RawMessage) {
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,19 +530,34 @@ 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,
@@ -451,6 +451,8 @@ func (es *ExecutorService) ExecuteDispatcher(ctx context.Context, req *executor.
if task == nil { if task == nil {
return executor.Execute(ctx, executor.Request{ return executor.Execute(ctx, executor.Request{
Command: req.Command, Command: req.Command,
PreCommand: req.PreCommand,
PostCommand: req.PostCommand,
WorkDir: req.WorkDir, WorkDir: req.WorkDir,
Envs: req.Envs, Envs: req.Envs,
Timeout: req.Timeout, Timeout: req.Timeout,
@@ -477,6 +479,8 @@ 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,
PreCommand: req.PreCommand,
PostCommand: req.PostCommand,
WorkDir: req.WorkDir, WorkDir: req.WorkDir,
Envs: req.Envs, Envs: req.Envs,
Timeout: req.Timeout, Timeout: req.Timeout,
@@ -1009,6 +1013,9 @@ func (es *ExecutorService) ExecuteRemoteForScheduler(task *models.Task, logID st
"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)