• DevOps
  • DevOps 下 Golang 项目的 go mod 下载慢的问题

  • 首先感谢团队!
  • 这是普通的 go web 项目,在每次 download 过程一般都要 5 到 10min

图片

  • 在 Dockerfile 里面我们也配置了 ENV,具体如下:
FROM golang:alpine as builder
WORKDIR /data
COPY . /data

ENV CGO_ENABLED=0
ENV GO111MODULE=on
ENV GOPROXY=https://goproxy.io,https://goproxy.cn,direct

RUN go build -ldflags '-s -extldflags "-static"' -o commond rpcx-server/domain/common/commond.go

FROM alpine:latest
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories \
    && apk update \
    && apk add --no-cache ca-certificates \
    && apk add --no-cache tzdata \
    && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    && echo "Asia/Shanghai" > /etc/timezone \
    && rm -rf /var/cache/apk/* /tmp/* /var/tmp/* $HOME/.cache

省略下面其他内容
  • 因为发现上面的方式不行,所以在 jenkinsfile 也尝试了加这种变量,但是也没有加快下载:
stage('build & push snapshot') {
  steps {
    container('go') {
      sh 'export GO111MODULE=on && export GOPROXY=https://goproxy.cn,direct && go env && go env'
      sh 'docker build -t $DOCKER_REPO_ADDRESS/$DOCKER_REPO_NAMESPACE/$APP_NAME -f Dockerfile_activity .'
      }
    }
  }
}

  • 我们在论坛上搜索:gomodule,goproxy 关键字得到的文章都没找到合适的….
  • 我们问题的本质是,我们只希望能加快 download 包这个过程,如果通过修改 jenkins 也可以我们也愿意,现在我们实在想不出啥办法来加速这个过程了。
  • 再次感谢!
  • shaowenchen 回复了此帖
  • cdk8s-meek

    缓存优化主要有两个方向,一个是镜像,一个是 Library。

    简单说下 Go 场景下的 Library 的方案,如果是 go mod 下载比较慢,可以将 vendor 提交到仓库。另一种方式是通过挂载目录,类似 Java 的 .m2,Npm 的 node_modules,可以参考系统配置,但是不太推荐。还有一种是归档 Library,可以参考 GitLab CI 里面的 Cache。

    cdk8s-meek

    缓存优化主要有两个方向,一个是镜像,一个是 Library。

    简单说下 Go 场景下的 Library 的方案,如果是 go mod 下载比较慢,可以将 vendor 提交到仓库。另一种方式是通过挂载目录,类似 Java 的 .m2,Npm 的 node_modules,可以参考系统配置,但是不太推荐。还有一种是归档 Library,可以参考 GitLab CI 里面的 Cache。

      1 个月 后

      cdk8s-meek 老哥,ci编译go项目,你用的是哪个容器,有go环境的吗
      pipeline {
      agent {
      node {
      label ‘maven’
      }

      shaowenchen 我看咱们ci的go容器的go版本是1.12,这个有影响吗,有高版本的go环境嘛?

      shaowenchen 嗨嗨,大兄弟,ci编译可以用自己的容器嘛?或者是咱们这有没有提供高版本的go 1.15的编译镜像。

        zqh

        可以用自己的容器 ,搜下文档 Podtemplate,最少有三四种方式。

        2 个月 后

        @cdk8s-meek 我现在也在整这个,我现在不能下载依赖,你可以把你的流水线文件发给我一下吗?