Documentation
¶
Index ¶
- Constants
- Variables
- func DefaultRunnerContainerImage() string
- func IsSafeRunnerNameOrPath(s string) bool
- func LoadAndSave(path string, fn func(*Config) error) error
- func NormalizedContainerName(name string) string
- func Validate(c *Config) error
- func ValidateTarget(targetType, target string) error
- type Config
- type ResourceLimits
- type RunnerItem
- type RunnersConfig
- type ServerConfig
Constants ¶
const DefaultJobDockerBackend = "dind"
DefaultJobDockerBackend 未配置 job_docker_backend 时的默认后端
const DefaultRunnerImageRepo = "ghcr.io/soulteary/runner-fleet"
DefaultRunnerImageRepo 默认 Runner 镜像仓库名,与 Manager 同仓库
Variables ¶
var JobDockerBackends = []string{"dind", "host-socket", "none"}
JobDockerBackends 是 job_docker_backend 的全部合法取值。 提成包级变量而不是散在 Validate 里的局部 map:全局配置与 items[] 两处都要校验, 错误信息也由它拼出来,改动一处即可,不会出现「多了一个取值但报错还是老三样」。
Functions ¶
func DefaultRunnerContainerImage ¶
func DefaultRunnerContainerImage() string
DefaultRunnerContainerImage 返回默认 Runner 容器镜像(未配置 container_image 时使用)。 Tag 取自环境变量 FLEET_IMAGE_TAG,未设置时为 v1.7.0;镜像名为 {repo}:{tag}-runner。
func IsSafeRunnerNameOrPath ¶
IsSafeRunnerNameOrPath 校验 name/path 不含路径穿越或非法字符(禁止 .. / \)
func LoadAndSave ¶
LoadAndSave 在持锁下加载配置、执行 fn、写回;用于所有修改配置的写操作,避免并发覆盖
func NormalizedContainerName ¶
NormalizedContainerName 将 runner 名称转为合法容器名(仅保留字母数字横线,并加前缀),供 config 与 runner 包共用
func ValidateTarget ¶
ValidateTarget 校验 target 格式:org 为组织名(不含 /),repo 为 owner/repo(恰好一个斜杠且两端非空)
Types ¶
type Config ¶
type Config struct {
Server ServerConfig `yaml:"server"`
Runners RunnersConfig `yaml:"runners"`
}
Config 应用配置
func (*Config) ContainerImageFor ¶
ContainerImageFor 返回该 Runner 实际使用的容器镜像,优先级: items[].container_image > runners.container_image > DefaultRunnerContainerImage()
func (*Config) FindItem ¶
func (c *Config) FindItem(name string) (RunnerItem, bool)
FindItem 按名称查找 Runner 配置项
func (*Config) JobDockerBackendFor ¶
JobDockerBackendFor 返回该 Runner 实际使用的 Job Docker 后端,优先级: items[].job_docker_backend > runners.job_docker_backend > dind
type ResourceLimits ¶
type ResourceLimits struct {
CPUs string `yaml:"cpus,omitempty"` // --cpus,如 "2" 或 "1.5"
Memory string `yaml:"memory,omitempty"` // --memory,如 "4g"、"512m"
MemorySwap string `yaml:"memory_swap,omitempty"` // --memory-swap,如 "4g";设为 "-1" 表示不限 swap
PidsLimit int `yaml:"pids_limit,omitempty"` // --pids-limit,正数生效,-1 表示不限
}
ResourceLimits Runner 容器的资源上限,字段留空表示不限制。 取值直接透传给 docker create,语义与 docker 官方一致。
func (ResourceLimits) Args ¶
func (r ResourceLimits) Args() []string
Args 将资源上限转为 docker create 参数,未设置的字段不产生参数
func (ResourceLimits) Validate ¶
func (r ResourceLimits) Validate() error
Validate 校验取值格式,避免把非法值传给 docker 后才在创建容器时报错
type RunnerItem ¶
type RunnerItem struct {
Name string `yaml:"name"` // 显示名称,也用作目录名
Path string `yaml:"path"` // 相对 base_path 的目录,空则用 name
TargetType string `yaml:"target_type"` // org | repo
Target string `yaml:"target"` // org 名或 owner/repo
Labels []string `yaml:"labels"` // 自定义标签
// 以下仅容器模式有效,留空则回落到 runners 下的全局同名配置。
// 一台机器上不同项目往往需要不同工具链(如 Flutter+Android 与 Node),
// 全局单一镜像无法覆盖,故允许按 Runner 覆盖。
ContainerImage string `yaml:"container_image,omitempty"` // 该 Runner 使用的容器镜像
JobDockerBackend string `yaml:"job_docker_backend,omitempty"` // dind | host-socket | none
}
RunnerItem 单个 Runner 配置
func (RunnerItem) InstallPath ¶
func (r RunnerItem) InstallPath(basePath string) string
InstallPath 返回该 runner 的完整安装路径
type RunnersConfig ¶
type RunnersConfig struct {
BasePath string `yaml:"base_path"` // 所有 runner 安装的根目录
Items []RunnerItem `yaml:"items"`
// 容器模式:Runner 运行在独立容器中,Manager 通过 Docker API 启停并透过 Agent 获取状态
ContainerMode bool `yaml:"container_mode"` // 为 true 时启停与状态均走容器
ContainerImage string `yaml:"container_image"` // Runner 容器镜像,未填时由 DefaultRunnerContainerImage() 决定(FLEET_IMAGE_TAG 或 v1.7.0)
ContainerNetwork string `yaml:"container_network"` // 容器所在网络,与 Manager 同网以便访问 Agent,默认 runner-net
AgentPort int `yaml:"agent_port"` // 容器内 Agent 端口,默认 8081
// Job Docker 后端:Runner 容器内 Job 执行 docker 命令时的后端。dind=DinD 服务;host-socket=挂载宿主机 socket;none=不提供 Docker
JobDockerBackend string `yaml:"job_docker_backend"` // dind | host-socket | none,默认 dind
DindHost string `yaml:"dind_host"` // 仅 job_docker_backend=dind 时有效,DinD 主机名,默认 runner-dind
VolumeHostPath string `yaml:"volume_host_path"` // 容器模式下宿主机上 runners 根路径,供 docker create -v 使用;Manager 自身在容器内时必填(如 /data/runners)
// Resources 容器模式下创建 Runner 容器时施加的资源上限。
// 不限制时单个失控 Job(如 Gradle daemon)可耗尽整机内存,把 Manager 自身一并拖垮。
Resources ResourceLimits `yaml:"resources,omitempty"`
// DockerGID 仅 job_docker_backend=host-socket 时有效:创建 Runner 容器时追加的 docker 组 GID(--group-add),
// 使容器内 app(UID 1001) 可访问挂载进来的 docker.sock;0 表示自动探测 docker.sock 所属组
DockerGID int `yaml:"docker_gid"`
}
RunnersConfig Runner 根配置
type ServerConfig ¶
ServerConfig HTTP 服务配置