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"`
Envs string `json:"envs"`
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 {
logger.Errorf("解析立即执行请求失败: %v", err)
@@ -527,19 +530,34 @@ func (a *Agent) handleExecute(data json.RawMessage) {
}
// 准备执行请求
// 如果消息中携带了环境变量,则优先使用(通常由服务端解析好后推过来
// 如果消息中携带了环境变量或指令,则优先使用(确保即时生效
envs := task.Envs
if 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{
TaskID: task.ID,
LogID: req.LogID,
Name: task.Name,
Command: task.Command,
PreCommand: task.PreCommand,
PostCommand: task.PostCommand,
Command: command,
PreCommand: preCommand,
PostCommand: postCommand,
WorkDir: task.WorkDir,
Envs: executor.ParseEnvVars(envs),
Secrets: req.Secrets,
@@ -451,6 +451,8 @@ func (es *ExecutorService) ExecuteDispatcher(ctx context.Context, req *executor.
if task == nil {
return executor.Execute(ctx, executor.Request{
Command: req.Command,
PreCommand: req.PreCommand,
PostCommand: req.PostCommand,
WorkDir: req.WorkDir,
Envs: req.Envs,
Timeout: req.Timeout,
@@ -477,6 +479,8 @@ func (es *ExecutorService) ExecuteDispatcher(ctx context.Context, req *executor.
hooks := &LocalTaskHooks{es: es, logID: req.LogID}
return executor.ExecuteWithHooks(ctx, executor.Request{
Command: req.Command,
PreCommand: req.PreCommand,
PostCommand: req.PostCommand,
WorkDir: req.WorkDir,
Envs: req.Envs,
Timeout: req.Timeout,
@@ -1009,6 +1013,9 @@ func (es *ExecutorService) ExecuteRemoteForScheduler(task *models.Task, logID st
"log_id": logID,
"envs": envs,
"secrets": secrets,
"command": task.Command,
"pre_command": task.PreCommand,
"post_command": task.PostCommand,
})
if err != nil {
return nil, fmt.Errorf("发送执行命令失败: %v", err)