config

package
v1.7.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 21, 2026 License: MIT Imports: 11 Imported by: 0

Documentation

Index

Constants

View Source
const DefaultJobDockerBackend = "dind"

DefaultJobDockerBackend 未配置 job_docker_backend 时的默认后端

View Source
const DefaultRunnerImageRepo = "ghcr.io/soulteary/runner-fleet"

DefaultRunnerImageRepo 默认 Runner 镜像仓库名,与 Manager 同仓库

Variables

View Source
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

func IsSafeRunnerNameOrPath(s string) bool

IsSafeRunnerNameOrPath 校验 name/path 不含路径穿越或非法字符(禁止 .. / \)

func LoadAndSave

func LoadAndSave(path string, fn func(*Config) error) error

LoadAndSave 在持锁下加载配置、执行 fn、写回;用于所有修改配置的写操作,避免并发覆盖

func NormalizedContainerName

func NormalizedContainerName(name string) string

NormalizedContainerName 将 runner 名称转为合法容器名(仅保留字母数字横线,并加前缀),供 config 与 runner 包共用

func Validate

func Validate(c *Config) error

Validate 校验配置:同名 Runner 冲突等

func ValidateTarget

func ValidateTarget(targetType, target string) error

ValidateTarget 校验 target 格式:org 为组织名(不含 /),repo 为 owner/repo(恰好一个斜杠且两端非空)

Types

type Config

type Config struct {
	Server  ServerConfig  `yaml:"server"`
	Runners RunnersConfig `yaml:"runners"`
}

Config 应用配置

func Load

func Load(path string) (*Config, error)

Load 从文件加载配置。若文件不存在,则基于默认配置与环境变量生成配置并写入 path,然后返回。

func (*Config) ContainerImageFor

func (c *Config) ContainerImageFor(runnerName string) string

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

func (c *Config) JobDockerBackendFor(runnerName string) string

JobDockerBackendFor 返回该 Runner 实际使用的 Job Docker 后端,优先级: items[].job_docker_backend > runners.job_docker_backend > dind

func (*Config) Save

func (c *Config) Save(path string) error

Save 将配置写回文件(调用方需自行加锁,写操作请使用 LoadAndSave)

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

type ServerConfig struct {
	Port int    `yaml:"port"`
	Addr string `yaml:"addr"`
}

ServerConfig HTTP 服务配置

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL