package model import "time" // BuildNode CI/CD 构建节点(Jenkins Agent 风格,基于 SSH 关联服务器资产) // Logan.Li type BuildNode struct { ID uint `gorm:"primarykey" json:"id"` Name string `gorm:"size:64;not null;uniqueIndex" json:"name"` Description string `gorm:"size:255" json:"description"` ServerID uint `gorm:"not null;index" json:"server_id"` // FK → servers Labels string `gorm:"size:255;comment:标签(逗号分隔,用于调度匹配)" json:"labels,omitempty"` MaxExecutors int `gorm:"default:2;comment:最大并发构建数" json:"max_executors"` WorkspacePath string `gorm:"size:255;default:/data/aiops-workspace;comment:远程工作区根目录" json:"workspace_path"` Enabled bool `gorm:"default:true" json:"enabled"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` // 运行时统计(非持久化,由调度器填充) RunningCount int `gorm:"-" json:"running_count,omitempty"` Hostname string `gorm:"-" json:"hostname,omitempty"` IP string `gorm:"-" json:"ip,omitempty"` } func (BuildNode) TableName() string { return "deploy_build_nodes" } // BuildMasterConfig Master 内置构建节点并发配置(单行) // Logan.Li type BuildMasterConfig struct { ID uint `gorm:"primarykey" json:"id"` MaxExecutors int `gorm:"default:2;not null;comment:最大并发(1=串行排队)" json:"max_executors"` UpdatedAt time.Time `json:"updated_at"` } func (BuildMasterConfig) TableName() string { return "deploy_build_master_config" } // UpdateBuildMasterRequest 更新 Master 并发数 // Logan.Li type UpdateBuildMasterRequest struct { MaxExecutors int `json:"max_executors" binding:"required,min=1,max=32"` } // CreateBuildNodeRequest 创建构建节点 type CreateBuildNodeRequest struct { Name string `json:"name" binding:"required"` Description string `json:"description"` ServerID uint `json:"server_id" binding:"required"` Labels string `json:"labels"` MaxExecutors int `json:"max_executors"` WorkspacePath string `json:"workspace_path"` } // UpdateBuildNodeRequest 更新构建节点 type UpdateBuildNodeRequest struct { Name string `json:"name"` Description string `json:"description"` ServerID *uint `json:"server_id"` Labels string `json:"labels"` MaxExecutors int `json:"max_executors"` WorkspacePath string `json:"workspace_path"` Enabled *bool `json:"enabled"` }