增加cmd命令

This commit is contained in:
ayflying
2025-01-16 15:57:20 +08:00
parent f9bdc0f707
commit d3062a0240
4 changed files with 237 additions and 0 deletions

95
cmd/update.go Normal file
View File

@@ -0,0 +1,95 @@
package cmd
import (
"context"
"github.com/ayflying/utility_go/s3"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/net/ghttp"
"github.com/gogf/gf/v2/os/gcfg"
"github.com/gogf/gf/v2/os/gcmd"
"os"
"time"
)
type serverCfg struct {
Name string `json:"name" dc:"服务名"`
Address string `json:"address" dc:"服务地址"`
Prod bool `json:"prod" dc:"是否生产环境"`
}
type UpdateReq struct {
File *ghttp.UploadFile `json:"file" binding:"required" dc:"文件"`
FileUrl string `json:"file_url" dc:"文件地址"`
}
var (
Update = gcmd.Command{
Name: "update",
Usage: "update",
Brief: "更新系统",
Func: func(ctx context.Context, parser *gcmd.Parser) (err error) {
g.Log().Info(ctx, "准备上传更新文件")
//加载编辑配置文件
g.Cfg("hack").GetAdapter().(*gcfg.AdapterFile).SetFileName("hack/config.yaml")
getFileName, err := g.Cfg("hack").Get(ctx, "gfcli.build.name")
var list []*serverCfg
serverList := g.Cfg().MustGet(ctx, "server_list")
serverList.Scan(&list)
//如果有p或者prod参数则删除prod字段为true的服务
if parser.GetOpt("a").IsNil() {
var temp []*serverCfg
for _, v := range list {
if v.Prod == false {
temp = append(temp, v)
}
}
list = temp
} else {
g.Dump("升级", parser.GetOpt("a"))
}
g.Dump("需要更新的服务器", list)
filename := "linux_amd64/shining_u_server"
obj, err := os.Open(filename)
ff, err := obj.Stat()
var s3Mod *s3.Mod
//切换s3目标
updateServerS3Name, _ := g.Config().Get(ctx, "update_server_s3_name")
if updateServerS3Name != nil {
s3Mod = s3.New(updateServerS3Name.String())
} else {
s3Mod = s3.New("default")
}
bucketName := s3Mod.GetCfg().BucketName
_, err = s3Mod.PutObject(obj, getFileName.String(), bucketName, ff.Size())
if err != nil {
return err
}
//上传当前文件
url, err := s3Mod.GetFileUrl(getFileName.String(), bucketName)
g.Log().Debugf(ctx, "下载地址:%v", url)
//循环服务器,推送更新
for _, v := range list {
address := v.Address
g.Log().Debugf(ctx, "准备同步服务器:%v,url=%v", v.Name, address+"/callback/update")
get, err := g.Client().Discovery(nil).Timeout(time.Minute*1).Post(ctx, address+"/callback/update", &UpdateReq{
FileUrl: url.String(),
})
if err != nil {
g.Log().Error(ctx, err)
}
defer get.Close()
g.Log().Debugf(ctx, "同步服务器:%v,完成=%v", v.Name, address)
}
return
},
}
)