diff --git a/config_handler/config_handler.go b/config_handler/config_handler.go index d3b0727..73648dd 100644 --- a/config_handler/config_handler.go +++ b/config_handler/config_handler.go @@ -50,7 +50,7 @@ func (p *plugin) Find(ctx context.Context, req *config.Request) (*drone.Config, // 4. 根据文件树以及原始配置文件的信息,组装需要构建的服务的ci信息 // 4.1 api modifiedApiList := getModifiedApi(cfg.Api, modifiedFileList) - destinationApi, err := modifiedApiList.toDestinationConfig() + destinationApi, err := modifiedApiList.toDestinationConfig(cfg.Name) if err != nil { logrus.Error(err) return nil, err @@ -58,7 +58,7 @@ func (p *plugin) Find(ctx context.Context, req *config.Request) (*drone.Config, // 4.2 service modifiedServiceList := getModifiedService(cfg.Service, modifiedFileList) - destinationService, err := modifiedServiceList.toDestinationConfig() + destinationService, err := modifiedServiceList.toDestinationConfig(cfg.Name) if err != nil { logrus.Error(err) return nil, err diff --git a/config_handler/destination_config.go b/config_handler/destination_config.go index 6d864b7..00ea760 100644 --- a/config_handler/destination_config.go +++ b/config_handler/destination_config.go @@ -6,10 +6,10 @@ type Handler interface { ToDestinationConfig() (string, error) } -func (al ApiList) toDestinationConfig() (string, error) { +func (al ApiList) toDestinationConfig(nameSpace string) (string, error) { retConfig := "" for _, api := range al { - config, err := api.toDestinationConfig() + config, err := api.toDestinationConfig(nameSpace) if err != nil { return "", err } @@ -18,24 +18,25 @@ func (al ApiList) toDestinationConfig() (string, error) { return retConfig, nil } -func (a Api) toDestinationConfig() (string, error) { +func (a Api) toDestinationConfig(nameSpace string) (string, error) { var handler Handler switch a.Type { case go_handler.TypeGolang: handler = go_handler.GoApiHandler{ - Name: a.Name, - Root: a.Root, - Port: a.Port, + NameSpace: nameSpace, + Name: a.Name, + Root: a.Root, + Port: a.Port, } } return handler.ToDestinationConfig() } -func (sl ServiceList) toDestinationConfig() (string, error) { +func (sl ServiceList) toDestinationConfig(nameSpace string) (string, error) { retConfig := "" for _, service := range sl { - config, err := service.toDestinationConfig() + config, err := service.toDestinationConfig(nameSpace) if err != nil { return "", err } @@ -44,14 +45,15 @@ func (sl ServiceList) toDestinationConfig() (string, error) { return retConfig, nil } -func (s Service) toDestinationConfig() (string, error) { +func (s Service) toDestinationConfig(nameSpace string) (string, error) { var handler Handler switch s.Type { case go_handler.TypeGolang: handler = go_handler.GoApiHandler{ - Name: s.Name, - Root: s.Root, - Port: s.Port, + NameSpace: nameSpace, + Name: s.Name, + Root: s.Root, + Port: s.Port, } } diff --git a/git/git.go b/git/git.go index a957f7b..fe1454b 100644 --- a/git/git.go +++ b/git/git.go @@ -12,7 +12,7 @@ var cli *gitea.Client func init() { var err error - cli, err = gitea.NewClient("https://git.icechen.cn/", gitea.SetToken("4322b0d361004db5dcea1741417f9e014a0f428f")) + cli, err = gitea.NewClient("http://gitea:3000/", gitea.SetToken("4322b0d361004db5dcea1741417f9e014a0f428f")) if err != nil { panic(err) } diff --git a/go_handler/go_api_handler.go b/go_handler/go_api_handler.go index 31ca1eb..6da122a 100644 --- a/go_handler/go_api_handler.go +++ b/go_handler/go_api_handler.go @@ -1,24 +1,67 @@ package go_handler +import ( + "bytes" + "text/template" +) + const TypeGolang = "golang" -const defaultPipeline = ` +const apiPipeline = ` kind: pipeline -name: default +type: docker +name: 部署{{ .Name }} + steps: -- name: build - image: golang - commands: - - go build - - go test -v + - name: build + image: plugins/docker + volumes: + - name: docker + path: /var/run/docker.sock + settings: + username: + from_secret: reg_username + password: + from_secret: reg_password + repo: reg.icechen.cn/{{ .NameSpace }}/{{ .Name }} + registry: reg.icechen.cn + tags: ${DRONE_COMMIT:0:8} + + - name: run + image: docker + volumes: + - name: docker + path: /var/run/docker.sock + commands: + - docker rm -f {{ .NameSpace }}-{{ .Name }} + - docker run -d --name="{{ .NameSpace }}-{{ .Name }}" reg.icechen.cn/{{ .NameSpace }}/{{ .Name }}:${DRONE_COMMIT:0:8} + +volumes: + - name: docker + host: + path: /var/run/docker.sock ` type GoApiHandler struct { - Name string - Root string - Port string + NameSpace string + Name string + Root string + Port string } -func (GoApiHandler) ToDestinationConfig() (string, error) { - return "", nil +func (gah GoApiHandler) ToDestinationConfig() (string, error) { + var err error + t := template.New(gah.Name) + t, err = t.Parse(apiPipeline) + if err != nil { + return "", err + } + + b := bytes.Buffer{} + err = t.Execute(&b, gah) + if err != nil { + return "", err + } + + return b.String(), nil } diff --git a/go_handler/go_service_handler.go b/go_handler/go_service_handler.go index 20c74c4..cb7e3c6 100644 --- a/go_handler/go_service_handler.go +++ b/go_handler/go_service_handler.go @@ -1,9 +1,10 @@ package go_handler type GoServiceHandler struct { - Name string - Root string - Port string + NameSpace string + Name string + Root string + Port string } func (GoServiceHandler) ToDestinationConfig() (string, error) {