fix: env update error

This commit is contained in:
engigu
2026-03-30 16:46:19 +08:00
parent 18bc3ec6c8
commit 4245f386c6
@@ -444,6 +444,9 @@ func (es *ExecutorService) ExecuteDispatcher(ctx context.Context, req *executor.
}, stdout, stderr)
}
// 重新加载最新的环境变量,满足即时生效的需求
es.refreshExecutionRequestEnvs(req, task)
// 特殊处理仓库同步任务
if task.Type == constant.TaskTypeRepo {
cmd, workDir := es.BuildRepoCommand(task)
@@ -1034,6 +1037,40 @@ func (es *ExecutorService) loadEnvVars(taskID string, envIDs string) ([]string,
return nil, nil
}
// refreshExecutionRequestEnvs 重新加载最新的环境变量,并与原请求中的变量合并(保留额外变量)
func (es *ExecutorService) refreshExecutionRequestEnvs(req *executor.ExecutionRequest, task *models.Task) {
if task == nil || (req.Type != executor.TaskTypeCron && req.Type != executor.TaskTypeManual) {
return
}
// 1. 备份原请求中的环境变量(用于后续保留手动指定的额外变量)
currentEnvs := req.Envs
// 2. 从数据库加载最新的环境变量设置
envs, secrets := es.loadEnvVars(task.ID, string(task.Envs))
req.Envs = envs
req.Secrets = secrets
// 3. 将原请求中存在但数据库中不存在的“额外变量”合并回来(如 API 注入、手动执行参数等)
for _, ce := range currentEnvs {
idx := strings.Index(ce, "=")
if idx == -1 {
continue
}
name := ce[:idx]
found := false
for _, ne := range envs {
if strings.HasPrefix(ne, name+"=") {
found = true
break
}
}
if !found {
req.Envs = append(req.Envs, ce)
}
}
}
func (es *ExecutorService) ResolvePath(path string) string {
absScriptsDir := resolveAbsScriptsDir()
return strings.ReplaceAll(path, "$SCRIPTS_DIR$", absScriptsDir)