go-agent-development
26
总安装量
20
周安装量
#14250
全站排名
安装命令
npx skills add https://github.com/tencentblueking/bk-ci --skill go-agent-development
Agent 安装分布
claude-code
12
gemini-cli
11
opencode
10
codex
9
cursor
9
Skill 文档
Go Agent å¼å
Quick Reference
Go çæ¬ï¼1.19+
è¿ç¨ç»æï¼DevopsDaemonï¼å®æ¤è¿ç¨ï¼ + DevopsAgentï¼ä¸»è¿ç¨ï¼
æ ¸å¿å
ï¼api/ï¼API è°ç¨ï¼| config/ï¼é
ç½®ï¼| job/ï¼ä»»å¡ï¼| pipeline/ï¼æµæ°´çº¿ï¼
æ¥å¿ï¼logs.Debug/Info/Error/WithError
æç®ç¤ºä¾
// API è°ç¨
func AgentStartup() (*httputil.DevopsResult, error) {
url := buildUrl("/ms/environment/api/buildAgent/agent/thirdPartyAgent/startup")
startInfo := &ThirdPartyAgentStartInfo{
HostName: systemutil.GetHostName(),
HostIp: systemutil.GetAgentIp(),
DetectOs: systemutil.GetOsName(),
MasterVersion: config.AgentVersion,
}
return httputil.NewHttpClient().Post(url).Body(startInfo, false).
SetHeaders(config.GAgentConfig.GetAuthHeaderMap()).Execute(nil).IntoDevopsResult()
}
When to Use
- å¼åæå»ºæº Agent
- å®ç°ä»»å¡æ§è¡é»è¾
- å¤ç Agent ä¸å端éä¿¡
- ç¼å Go å·¥å ·å½æ°
When NOT to Use
- å端 Kotlin/Java å¼å â 使ç¨
backend-microservice-development - è°åº¦æ¨¡åä¸å¡é»è¾ â 使ç¨
dispatch-module-architecture
项ç®ç»æ
src/agent/
âââ agent/ # 主代ç
â âââ src/pkg/
â âââ api/ # API è°ç¨
â âââ config/ # é
置管ç
â âââ collector/ # æ°æ®éé
â âââ job/ # 任塿§è¡
â âââ util/ # å·¥å
·å½æ°
âââ agent-slim/ # è½»éç代ç
âââ common/ # éç¨åº
å½åè§è
// å
å½åï¼å°ååè¯ï¼ä¸ä½¿ç¨ä¸å线
package api
package config
// ç»æä½ï¼PascalCase
type ThirdPartyAgentStartInfo struct {
HostName string `json:"hostname"`
HostIp string `json:"hostIp"`
}
// 常éï¼é©¼å³°å½å
const (
KeyProjectId = "devops.project.id"
KeyAgentId = "devops.agent.id"
)
// æä¸¾
type BuildJobType string
const (
AllBuildType BuildJobType = "ALL"
DockerBuildType BuildJobType = "DOCKER"
)
é 置管ç
type AgentConfig struct {
Gateway string
ProjectId string
AgentId string
SecretKey string
ParallelTaskCount int
}
var GAgentConfig *AgentConfig
func GetGateWay() string {
return GAgentConfig.Gateway
}
é误å¤ç
// æ åéè¯¯æ£æ¥
if err != nil {
logs.WithError(err).Error("agent startup failed")
return
}
// éè¯æ¨¡å¼
for {
_, err = job.AgentStartup()
if err == nil {
break
}
logs.WithError(err).Error("retry startup")
time.Sleep(5 * time.Second)
}
// Panic æ¢å¤
defer func() {
if err := recover(); err != nil {
logs.Error("panic recovered: ", err)
}
}()
æ¥å¿è§è
logs.Debug("debug message")
logs.Info("info message")
logs.Infof("formatted: %s", data)
logs.Error("error message")
logs.WithError(err).Error("with error context")
并忍¡å¼
// å¯å¨ goroutine
go collector.Collect()
go cron.CleanJob()
// ä½¿ç¨ defer æ¸
ç
defer config.EBus.Unsubscribe(config.IpEvent, eBusId)
// Channel éä¿¡
done := make(chan bool)
go func() {
// do work
done <- true
}()
<-done
HTTP 客æ·ç«¯
httputil.NewHttpClient().
Post(url).
Body(data, false).
SetHeaders(headers).
Execute(nil).
IntoDevopsResult()
Checklist
å¼å Agent åè½å确认ï¼
- ä½¿ç¨æ åé误å¤ç模å¼
- æ·»å éå½çæ¥å¿è®°å½
- goroutine æ panic æ¢å¤
- ç½ç»è°ç¨æéè¯æºå¶
- èµæºä½¿ç¨ defer æ¸ ç