Documentation
¶
Index ¶
- Constants
- func ParseOutputParams(filePath string) (map[string]string, error)
- type AssetCopier
- type CancleRequest
- type CommandMetadata
- type DeleteWorkDirRequest
- type ExecuteCommandRequest
- func (s ExecuteCommandRequest) EnableCollectUploadFiles()
- func (r *ExecuteCommandRequest) GetAssets() []string
- func (r *ExecuteCommandRequest) GetMetadata() *CommandMetadata
- func (s ExecuteCommandRequest) GetResultFilePath() string
- func (r *ExecuteCommandRequest) GetWorkDir() string
- func (r *ExecuteCommandRequest) SetAssets(assetdir ...string)
- func (s ExecuteCommandRequest) SetCollectFiles(filenames ...string)
- func (s ExecuteCommandRequest) SetCreateProcessGroup(enable bool)
- func (s ExecuteCommandRequest) SetEnv(key, value string)
- func (s ExecuteCommandRequest) SetEnvAll(params map[string]string)
- func (s ExecuteCommandRequest) SetEnvFromParams(getParam func(string) string, paramKeys ...string)
- func (s ExecuteCommandRequest) SetEnvMultiple(envVars map[string]string)
- func (s ExecuteCommandRequest) SetLogCallback(callback func(string))
- func (s ExecuteCommandRequest) SetLogFile(logFile string)
- func (s ExecuteCommandRequest) SetMetadata(metadata *CommandMetadata)
- func (s ExecuteCommandRequest) SetResultFile(resultFile string)
- func (s ExecuteCommandRequest) SetTimeout(timeout time.Duration)
- func (s ExecuteCommandRequest) SetUseProcessGroupKill(enable bool)
- func (s ExecuteCommandRequest) UpdateMetadata(updates map[string]any)
- func (s ExecuteCommandRequest) WriteDebugScript(scriptPath string, args []string) (string, error)
- type ExecuteScriptRequest
- func (s ExecuteScriptRequest) EnableCollectUploadFiles()
- func (r *ExecuteScriptRequest) GetAssets() []string
- func (r *ExecuteScriptRequest) GetMetadata() *CommandMetadata
- func (s ExecuteScriptRequest) GetResultFilePath() string
- func (r *ExecuteScriptRequest) GetWorkDir() string
- func (r *ExecuteScriptRequest) SetAssets(assetdir ...string)
- func (s ExecuteScriptRequest) SetCollectFiles(filenames ...string)
- func (s ExecuteScriptRequest) SetCreateProcessGroup(enable bool)
- func (s ExecuteScriptRequest) SetEnv(key, value string)
- func (s ExecuteScriptRequest) SetEnvAll(params map[string]string)
- func (s ExecuteScriptRequest) SetEnvFromParams(getParam func(string) string, paramKeys ...string)
- func (s ExecuteScriptRequest) SetEnvMultiple(envVars map[string]string)
- func (s ExecuteScriptRequest) SetLogCallback(callback func(string))
- func (s ExecuteScriptRequest) SetLogFile(logFile string)
- func (s ExecuteScriptRequest) SetMetadata(metadata *CommandMetadata)
- func (s ExecuteScriptRequest) SetResultFile(resultFile string)
- func (s ExecuteScriptRequest) SetTimeout(timeout time.Duration)
- func (s ExecuteScriptRequest) SetUseProcessGroupKill(enable bool)
- func (s ExecuteScriptRequest) UpdateMetadata(updates map[string]any)
- func (s ExecuteScriptRequest) WriteDebugScript(scriptPath string, args []string) (string, error)
- type ExecutionResult
- type GetExecutionResultRequest
- type ScriptExcutor
- func (s *ScriptExcutor) Cancle(ctx context.Context, in *CancleRequest) error
- func (r *ScriptExcutor) CleanWorkspace(duration time.Duration) error
- func (s *ScriptExcutor) DeleteWorkDir(ctx context.Context, in *DeleteWorkDirRequest) error
- func (r *ScriptExcutor) ExecuteCommand(ctx context.Context, in *ExecuteCommandRequest) (*ExecutionResult, error)
- func (r *ScriptExcutor) ExecuteScript(ctx context.Context, in *ExecuteScriptRequest) (*ExecutionResult, error)
- func (s *ScriptExcutor) GetExecutionResult(ctx context.Context, in *GetExecutionResultRequest) (*ExecutionResult, error)
- func (r *ScriptExcutor) Init() error
- func (r *ScriptExcutor) InjectEnv(in *shellExecutor)
- func (r *ScriptExcutor) Name() string
- func (r *ScriptExcutor) ResolveAbsolutePath(path string) (string, error)
- func (r *ScriptExcutor) WithPrefixScripPath(scriptName string) string
- func (r *ScriptExcutor) WithPrefixWorkSpace(workspace string) string
- type ScriptIntegrityManager
- func (m *ScriptIntegrityManager) Disable()
- func (m *ScriptIntegrityManager) Enable()
- func (m *ScriptIntegrityManager) GetRegisteredScripts() map[string]string
- func (m *ScriptIntegrityManager) IsEnabled() bool
- func (m *ScriptIntegrityManager) RegisterScripts() error
- func (m *ScriptIntegrityManager) VerifyScript(scriptPath string) error
- type Service
- type UploadFileInfo
Constants ¶
const ( // 通用参数: 是否生成debug.sh调试脚本 // 上游模块设置 req.SetEnv("debug_script", "true") 即可启用 // 注意: debug.sh 可能包含敏感信息(如密码、token等), 请仅在开发调试时启用 PARAM_DEBUG_SCRIPT = "debug_script" // 构建输出目录参数, 可选, 默认 output/ PARAM_BUILD_OUTPUT_DIR = "build_output_dir" // 脚本输出环境变量文件路径参数 PARAM_OUTPUT_ENV_FILE = "output_env_file" // 共享数据目录参数 PARAM_SHARED_DATA_DIR = "shared_data_dir" // 工作空间目录参数 PARAM_WORKSPACE = "workspace" // 脚本目录参数 PARAM_SCRIPT_DIR = "script_dir" )
const (
APP_NAME = "script_runner"
)
const EnableScriptVerificationAtBuild = false
EnableScriptVerificationAtBuild 编译时启用脚本完整性校验(开发环境,默认为 false)
Variables ¶
This section is empty.
Functions ¶
Types ¶
type AssetCopier ¶
type AssetCopier interface {
GetAssets() []string
GetWorkDir() string
SetEnv(key, value string)
GetMetadata() *CommandMetadata
}
AssetCopier 定义支持资产复制的请求接口
type CancleRequest ¶
type CancleRequest struct {
WorkDir string
}
type CommandMetadata ¶
type CommandMetadata struct {
ID string `json:"id"` // 命令唯一ID
Name string `json:"name"` // 命令名称
Description string `json:"description,omitempty"` // 命令描述
Tags []string `json:"tags,omitempty"` // 标签
CreatedBy string `json:"created_by"` // 创建者
CreatedAt time.Time `json:"created_at"` // 创建时间
Timeout time.Duration `json:"timeout"` // 超时时间
EnvVars map[string]string `json:"env_vars"` // 环境变量
WorkDir string `json:"work_dir"` // 工作目录
RefTask string `json:"ref_task,omitempty"` // 关联的任务
}
CommandMetadata 命令元数据
func (*CommandMetadata) GetEnvVar ¶
func (m *CommandMetadata) GetEnvVar(key string) string
GetEnvVar 获取环境变量(大小写不敏感) 因为 SetEnv 会将 key 转换为大写,所以查询时也需要转换为大写
type DeleteWorkDirRequest ¶
type DeleteWorkDirRequest struct {
WorkDir string
}
func NewDeleteWorkDirRequest ¶
func NewDeleteWorkDirRequest(workDir string) *DeleteWorkDirRequest
type ExecuteCommandRequest ¶
type ExecuteCommandRequest struct {
Command string
Assets []string // 资产目录列表
// contains filtered or unexported fields
}
func NewExecuteCommandRequest ¶
func NewExecuteCommandRequest(command string, workDir string) *ExecuteCommandRequest
func (ExecuteCommandRequest) EnableCollectUploadFiles ¶
func (s ExecuteCommandRequest) EnableCollectUploadFiles()
EnableCollectUploadFiles 启用收集输出目录文件信息 只有调用此方法后,执行完成时才会收集 build_output_dir 目录中的文件信息
func (*ExecuteCommandRequest) GetAssets ¶
func (r *ExecuteCommandRequest) GetAssets() []string
func (*ExecuteCommandRequest) GetMetadata ¶
func (r *ExecuteCommandRequest) GetMetadata() *CommandMetadata
func (ExecuteCommandRequest) GetResultFilePath ¶
func (s ExecuteCommandRequest) GetResultFilePath() string
GetResultFilePath 获取结果文件路径
func (*ExecuteCommandRequest) GetWorkDir ¶
func (r *ExecuteCommandRequest) GetWorkDir() string
func (*ExecuteCommandRequest) SetAssets ¶
func (r *ExecuteCommandRequest) SetAssets(assetdir ...string)
SetAssets 设置资产目录
func (ExecuteCommandRequest) SetCollectFiles ¶
func (s ExecuteCommandRequest) SetCollectFiles(filenames ...string)
SetCollectFiles 设置需要收集内容的文件列表
func (ExecuteCommandRequest) SetCreateProcessGroup ¶
func (s ExecuteCommandRequest) SetCreateProcessGroup(enable bool)
SetCreateProcessGroup 设置是否创建新的进程组 用于控制是否可以通过进程组杀死子进程树 默认 true,设为 false 时适用于自升级场景(如 agent_upgrade)
func (ExecuteCommandRequest) SetEnv ¶
func (s ExecuteCommandRequest) SetEnv(key, value string)
SetEnv 设置环境变量, key会被强制转换为大写
func (ExecuteCommandRequest) SetEnvAll ¶
SetEnvAll 透传所有任务参数到环境变量 这是最简洁的方式,适用于大多数场景 所有参数的 key 会被转换为大写
func (ExecuteCommandRequest) SetEnvFromParams ¶
SetEnvFromParams 从任务参数中批量设置环境变量 paramKeys: 需要透传的参数key列表 getParam: 获取参数值的函数(通常是 task.GetParam)
func (ExecuteCommandRequest) SetEnvMultiple ¶
SetEnvMultiple 批量设置环境变量
func (ExecuteCommandRequest) SetLogCallback ¶
func (s ExecuteCommandRequest) SetLogCallback(callback func(string))
SetLogCallback 设置日志回调函数
func (ExecuteCommandRequest) SetLogFile ¶
func (s ExecuteCommandRequest) SetLogFile(logFile string)
SetLogFile 设置日志文件路径
func (ExecuteCommandRequest) SetMetadata ¶
func (s ExecuteCommandRequest) SetMetadata(metadata *CommandMetadata)
SetMetadata 设置命令元数据
func (ExecuteCommandRequest) SetResultFile ¶
func (s ExecuteCommandRequest) SetResultFile(resultFile string)
SetResultFile 设置结果文件路径
func (ExecuteCommandRequest) SetTimeout ¶
SetTimeout 设置命令执行超时时间
func (ExecuteCommandRequest) SetUseProcessGroupKill ¶
func (s ExecuteCommandRequest) SetUseProcessGroupKill(enable bool)
SetUseProcessGroupKill 设置是否使用进程组杀死方式 默认 true,设为 false 时使用默认的单进程杀死方式
func (ExecuteCommandRequest) UpdateMetadata ¶
UpdateMetadata 更新元数据字段
type ExecuteScriptRequest ¶
type ExecuteScriptRequest struct {
ScriptPath string
Args []string
Assets []string // 资产目录列表
// contains filtered or unexported fields
}
func NewExecuteScriptRequest ¶
func NewExecuteScriptRequest(scriptPath string, workDir string, args ...string) *ExecuteScriptRequest
func (ExecuteScriptRequest) EnableCollectUploadFiles ¶
func (s ExecuteScriptRequest) EnableCollectUploadFiles()
EnableCollectUploadFiles 启用收集输出目录文件信息 只有调用此方法后,执行完成时才会收集 build_output_dir 目录中的文件信息
func (*ExecuteScriptRequest) GetAssets ¶
func (r *ExecuteScriptRequest) GetAssets() []string
实现 AssetCopier 接口
func (*ExecuteScriptRequest) GetMetadata ¶
func (r *ExecuteScriptRequest) GetMetadata() *CommandMetadata
func (ExecuteScriptRequest) GetResultFilePath ¶
func (s ExecuteScriptRequest) GetResultFilePath() string
GetResultFilePath 获取结果文件路径
func (*ExecuteScriptRequest) GetWorkDir ¶
func (r *ExecuteScriptRequest) GetWorkDir() string
func (*ExecuteScriptRequest) SetAssets ¶
func (r *ExecuteScriptRequest) SetAssets(assetdir ...string)
SetAssets 设置资产目录
func (ExecuteScriptRequest) SetCollectFiles ¶
func (s ExecuteScriptRequest) SetCollectFiles(filenames ...string)
SetCollectFiles 设置需要收集内容的文件列表
func (ExecuteScriptRequest) SetCreateProcessGroup ¶
func (s ExecuteScriptRequest) SetCreateProcessGroup(enable bool)
SetCreateProcessGroup 设置是否创建新的进程组 用于控制是否可以通过进程组杀死子进程树 默认 true,设为 false 时适用于自升级场景(如 agent_upgrade)
func (ExecuteScriptRequest) SetEnv ¶
func (s ExecuteScriptRequest) SetEnv(key, value string)
SetEnv 设置环境变量, key会被强制转换为大写
func (ExecuteScriptRequest) SetEnvFromParams ¶
SetEnvFromParams 从任务参数中批量设置环境变量 paramKeys: 需要透传的参数key列表 getParam: 获取参数值的函数(通常是 task.GetParam)
func (ExecuteScriptRequest) SetEnvMultiple ¶
SetEnvMultiple 批量设置环境变量
func (ExecuteScriptRequest) SetLogCallback ¶
func (s ExecuteScriptRequest) SetLogCallback(callback func(string))
SetLogCallback 设置日志回调函数
func (ExecuteScriptRequest) SetLogFile ¶
func (s ExecuteScriptRequest) SetLogFile(logFile string)
SetLogFile 设置日志文件路径
func (ExecuteScriptRequest) SetMetadata ¶
func (s ExecuteScriptRequest) SetMetadata(metadata *CommandMetadata)
SetMetadata 设置命令元数据
func (ExecuteScriptRequest) SetResultFile ¶
func (s ExecuteScriptRequest) SetResultFile(resultFile string)
SetResultFile 设置结果文件路径
func (ExecuteScriptRequest) SetTimeout ¶
SetTimeout 设置命令执行超时时间
func (ExecuteScriptRequest) SetUseProcessGroupKill ¶
func (s ExecuteScriptRequest) SetUseProcessGroupKill(enable bool)
SetUseProcessGroupKill 设置是否使用进程组杀死方式 默认 true,设为 false 时使用默认的单进程杀死方式
func (ExecuteScriptRequest) UpdateMetadata ¶
UpdateMetadata 更新元数据字段
type ExecutionResult ¶
type ExecutionResult struct {
// 命令
Command string `json:"command"`
// 错误原因
Error string `json:"error,omitempty"`
// 命令退出码
ExitCode int `json:"exit_code"`
// 命令开始执行时间
StartTime time.Time `json:"start_time"`
// 命令结束执行时间
EndTime *time.Time `json:"end_time"`
// 命令执行时长
Duration time.Duration `json:"duration"`
// 命令执行是否成功
Success bool `json:"success"`
// 是否跳过执行(跳过视为成功,但标记为 Skip 以便管道状态同步)
Skipped bool `json:"skipped,omitempty"`
// 非错误的说明信息(比如跳过原因等)
Message string `json:"message,omitempty"`
// 元数据
Metadata *CommandMetadata `json:"metadata"`
// 文件内容集合
FileContents map[string]string `json:"file_contents,omitempty"`
// 输出目录中的文件信息
UploadFiles []*UploadFileInfo `json:"upload_files,omitempty"`
// 脚本输出参数(供下一个任务使用)
OutputParams map[string]string `json:"output_params,omitempty"`
}
ExecutionResult 命令执行结果
func ExecutionSkipped ¶
func ExecutionSkipped(start time.Time, command string, message string) *ExecutionResult
ExecutionSkipped 创建一个跳过的执行结果(成功但标记为跳过)
func ExecutionSuccess ¶
func ExecutionSuccess(start time.Time, command string) *ExecutionResult
ExecutionSuccess 创建一个成功的执行结果
func NewExecutionFailed ¶
NewExecutionFailed 创建一个失败的执行结果
func (*ExecutionResult) CleanRef ¶
func (r *ExecutionResult) CleanRef() *ExecutionResult
func (*ExecutionResult) SensitiveParams ¶
func (r *ExecutionResult) SensitiveParams(params ...string) *ExecutionResult
提供一个参数脱敏方法(参数名忽略大小写比较)
func (*ExecutionResult) ToJSON ¶
func (r *ExecutionResult) ToJSON() string
type GetExecutionResultRequest ¶
type GetExecutionResultRequest struct {
WorkDir string
}
func NewGetExecutionResultRequest ¶
func NewGetExecutionResultRequest(workDir string) *GetExecutionResultRequest
type ScriptExcutor ¶
type ScriptExcutor struct {
ioc.ObjectImpl
// 脚本工作目录前缀
WorkDirPrefix string `json:"work_dir_prefix" yaml:"work_dir_prefix" toml:"work_dir_prefix" env:"SCRIPT_WORK_DIR_PREFIX"`
// 脚本目录前缀
ScriptDirPrefix string `json:"script_dir_prefix" yaml:"script_dir_prefix" toml:"script_dir_prefix" env:"SCRIPT_DIR_PREFIX"`
// 工作空间有效期
WorkspaceTTL string `json:"workspace_ttl" yaml:"workspace_ttl" toml:"workspace_ttl" env:"SCRIPT_WORKSPACE_TTL"`
// 资源目录
AssetsDirPrefix string `json:"assets_dir_prefix" yaml:"assets_dir_prefix" toml:"assets_dir_prefix" env:"SCRIPT_ASSETS_DIR_PREFIX"`
// 工作空间清理定时任务表达式
WorkspaceCleanCron string `json:"workspace_clean_cron" yaml:"workspace_clean_cron" toml:"workspace_clean_cron" env:"SCRIPT_WORKSPACE_CLEAN_CRON"`
// contains filtered or unexported fields
}
脚本执行器
func (*ScriptExcutor) Cancle ¶
func (s *ScriptExcutor) Cancle(ctx context.Context, in *CancleRequest) error
func (*ScriptExcutor) CleanWorkspace ¶
func (r *ScriptExcutor) CleanWorkspace(duration time.Duration) error
CleanWorkspace 清理工作目录下超过指定时间的 workspace duration: 时间期限,超过此时间的 workspace 将被删除
func (*ScriptExcutor) DeleteWorkDir ¶
func (s *ScriptExcutor) DeleteWorkDir(ctx context.Context, in *DeleteWorkDirRequest) error
删除工作目录
func (*ScriptExcutor) ExecuteCommand ¶
func (r *ScriptExcutor) ExecuteCommand(ctx context.Context, in *ExecuteCommandRequest) (*ExecutionResult, error)
执行命令
func (*ScriptExcutor) ExecuteScript ¶
func (r *ScriptExcutor) ExecuteScript(ctx context.Context, in *ExecuteScriptRequest) (*ExecutionResult, error)
执行脚本
func (*ScriptExcutor) GetExecutionResult ¶
func (s *ScriptExcutor) GetExecutionResult(ctx context.Context, in *GetExecutionResultRequest) (*ExecutionResult, error)
LoadResult 从文件加载执行结果
func (*ScriptExcutor) Init ¶
func (r *ScriptExcutor) Init() error
func (*ScriptExcutor) InjectEnv ¶
func (r *ScriptExcutor) InjectEnv(in *shellExecutor)
func (*ScriptExcutor) Name ¶
func (r *ScriptExcutor) Name() string
func (*ScriptExcutor) ResolveAbsolutePath ¶
func (r *ScriptExcutor) ResolveAbsolutePath(path string) (string, error)
ResolveAbsolutePath 将相对路径转换为绝对路径
func (*ScriptExcutor) WithPrefixScripPath ¶
func (r *ScriptExcutor) WithPrefixScripPath(scriptName string) string
func (*ScriptExcutor) WithPrefixWorkSpace ¶
func (r *ScriptExcutor) WithPrefixWorkSpace(workspace string) string
type ScriptIntegrityManager ¶
type ScriptIntegrityManager struct {
// contains filtered or unexported fields
}
ScriptIntegrityManager 脚本完整性管理器 脚本 hash 在编译时计算并硬编码到二进制中 在执行脚本前校验 hash,防止脚本被篡改 这确保了生产环境的脚本不会被篡改,即使脚本目录变为可写
func NewScriptIntegrityManager ¶
func NewScriptIntegrityManager(scriptDir string, enabled bool) *ScriptIntegrityManager
NewScriptIntegrityManager 创建脚本完整性管理器 从编译时嵌入的 hash 文件加载脚本 hash
func (*ScriptIntegrityManager) GetRegisteredScripts ¶
func (m *ScriptIntegrityManager) GetRegisteredScripts() map[string]string
GetRegisteredScripts 获取已注册的脚本列表
func (*ScriptIntegrityManager) IsEnabled ¶
func (m *ScriptIntegrityManager) IsEnabled() bool
IsEnabled 是否启用校验
func (*ScriptIntegrityManager) RegisterScripts ¶
func (m *ScriptIntegrityManager) RegisterScripts() error
RegisterScripts 验证编译时的脚本 hash 是否有效 不再扫描脚本目录,而是直接使用编译时的 hash
func (*ScriptIntegrityManager) VerifyScript ¶
func (m *ScriptIntegrityManager) VerifyScript(scriptPath string) error
VerifyScript 校验脚本完整性 在执行脚本前调用,验证脚本是否被篡改
type Service ¶
type Service interface {
// 执行脚本
ExecuteScript(ctx context.Context, in *ExecuteScriptRequest) (*ExecutionResult, error)
// 执行命令
ExecuteCommand(ctx context.Context, in *ExecuteCommandRequest) (*ExecutionResult, error)
// 获取执行结果
GetExecutionResult(ctx context.Context, in *GetExecutionResultRequest) (*ExecutionResult, error)
// 删除工作目录
DeleteWorkDir(ctx context.Context, in *DeleteWorkDirRequest) error
// 取消执行
Cancle(ctx context.Context, in *CancleRequest) error
// 清理过期的 workspace
CleanWorkspace(duration time.Duration) error
}
func GetService ¶
func GetService() Service