fix: env update error
This commit is contained in:
@@ -444,6 +444,9 @@ func (es *ExecutorService) ExecuteDispatcher(ctx context.Context, req *executor.
|
|||||||
}, stdout, stderr)
|
}, stdout, stderr)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 重新加载最新的环境变量,满足即时生效的需求
|
||||||
|
es.refreshExecutionRequestEnvs(req, task)
|
||||||
|
|
||||||
// 特殊处理仓库同步任务
|
// 特殊处理仓库同步任务
|
||||||
if task.Type == constant.TaskTypeRepo {
|
if task.Type == constant.TaskTypeRepo {
|
||||||
cmd, workDir := es.BuildRepoCommand(task)
|
cmd, workDir := es.BuildRepoCommand(task)
|
||||||
@@ -1034,6 +1037,40 @@ func (es *ExecutorService) loadEnvVars(taskID string, envIDs string) ([]string,
|
|||||||
return nil, nil
|
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 {
|
func (es *ExecutorService) ResolvePath(path string) string {
|
||||||
absScriptsDir := resolveAbsScriptsDir()
|
absScriptsDir := resolveAbsScriptsDir()
|
||||||
return strings.ReplaceAll(path, "$SCRIPTS_DIR$", absScriptsDir)
|
return strings.ReplaceAll(path, "$SCRIPTS_DIR$", absScriptsDir)
|
||||||
|
|||||||
Reference in New Issue
Block a user