From f997aee3bac3fa220045f7ab2eff89a9c976d5b2 Mon Sep 17 00:00:00 2001 From: Kevin Wan Date: Sat, 5 Dec 2020 21:48:09 +0800 Subject: [PATCH] optimize docker file generation, make docker build faster (#244) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * simplify code, format makefile * simplify code * some optimize by kevwan and benying (#240) Co-authored-by: 杨志泉 * optimization (#241) * optimize docker file generation, make docker build faster Co-authored-by: benying <31179034+benyingY@users.noreply.github.com> Co-authored-by: 杨志泉 Co-authored-by: bittoy --- tools/goctl/api/gogen/genhandlers.go | 3 ++- tools/goctl/docker/docker.go | 26 +++++++++++++++++++------- tools/goctl/docker/template.go | 15 +++++++++------ 3 files changed, 30 insertions(+), 14 deletions(-) diff --git a/tools/goctl/api/gogen/genhandlers.go b/tools/goctl/api/gogen/genhandlers.go index 5a3bec06..cdddefbe 100644 --- a/tools/goctl/api/gogen/genhandlers.go +++ b/tools/goctl/api/gogen/genhandlers.go @@ -75,7 +75,8 @@ func genHandler(dir string, cfg *config.Config, group spec.Group, route spec.Rou }) } -func doGenToFile(dir, handler string, cfg *config.Config, group spec.Group, route spec.Route, handleObj Handler) error { +func doGenToFile(dir, handler string, cfg *config.Config, group spec.Group, + route spec.Route, handleObj Handler) error { filename, err := format.FileNamingFormat(cfg.NamingFormat, handler) if err != nil { return err diff --git a/tools/goctl/docker/docker.go b/tools/goctl/docker/docker.go index 907f7aa0..efd62bb8 100644 --- a/tools/goctl/docker/docker.go +++ b/tools/goctl/docker/docker.go @@ -6,6 +6,7 @@ import ( "path/filepath" "strings" "text/template" + "time" "github.com/tal-tech/go-zero/tools/goctl/util" ctlutil "github.com/tal-tech/go-zero/tools/goctl/util" @@ -13,10 +14,19 @@ import ( ) const ( - etcDir = "etc" - yamlEtx = ".yaml" + etcDir = "etc" + yamlEtx = ".yaml" + cstOffset = 60 * 60 * 8 // 8 hours offset for Chinese Standard Time ) +type Docker struct { + Chinese bool + GoRelPath string + GoFile string + ExeFile string + Argument string +} + func DockerCommand(c *cli.Context) error { goFile := c.String("go") if len(goFile) == 0 { @@ -87,12 +97,14 @@ func generateDockerfile(goFile string, args ...string) error { builder.WriteString(`, "` + arg + `"`) } + _, offset := time.Now().Zone() t := template.Must(template.New("dockerfile").Parse(text)) - return t.Execute(out, map[string]string{ - "goRelPath": projPath, - "goFile": goFile, - "exeFile": util.FileNameWithoutExt(filepath.Base(goFile)), - "argument": builder.String(), + return t.Execute(out, Docker{ + Chinese: offset == cstOffset, + GoRelPath: projPath, + GoFile: goFile, + ExeFile: util.FileNameWithoutExt(filepath.Base(goFile)), + Argument: builder.String(), }) } diff --git a/tools/goctl/docker/template.go b/tools/goctl/docker/template.go index 08e298fe..7d96d57e 100644 --- a/tools/goctl/docker/template.go +++ b/tools/goctl/docker/template.go @@ -14,13 +14,16 @@ LABEL stage=gobuilder ENV CGO_ENABLED 0 ENV GOOS linux -ENV GOPROXY https://goproxy.cn,direct +{{if .Chinese}}ENV GOPROXY https://goproxy.cn,direct{{end}} WORKDIR /build/zero + +ADD go.mod . +ADD go.sum . +RUN go mod download COPY . . -RUN sh -c "[ -f go.mod ]" || exit -COPY {{.goRelPath}}/etc /app/etc -RUN go build -ldflags="-s -w" -o /app/{{.exeFile}} {{.goRelPath}}/{{.goFile}} +COPY {{.GoRelPath}}/etc /app/etc +RUN go build -ldflags="-s -w" -o /app/{{.ExeFile}} {{.GoRelPath}}/{{.GoFile}} FROM alpine @@ -31,10 +34,10 @@ RUN apk add --no-cache tzdata ENV TZ Asia/Shanghai WORKDIR /app -COPY --from=builder /app/{{.exeFile}} /app/{{.exeFile}} +COPY --from=builder /app/{{.ExeFile}} /app/{{.ExeFile}} COPY --from=builder /app/etc /app/etc -CMD ["./{{.exeFile}}"{{.argument}}] +CMD ["./{{.ExeFile}}"{{.Argument}}] ` )