最新消息:

使用gitlab CICD构建Docker镜像中的go语言缓存

IT技术 ipcpu 385浏览 0评论

本文以golang语言为例,介绍下缓存目录的映射,其他语言例如nodejs的npm也存在类似的问题。

一、概述

在使用Gitlab CICD构建Docker镜像的过程中,我们一般会采用DooD或者DinD的方式来运行runner,无论哪一种方式,Docker环境都是全新的场景,没有缓存;这是优点也是缺点,优点是环境干净不会有干扰因素,缺点也很明显,没有缓存,所有的依赖包都要重新下载,要是遇上网络环境不好,构建都需要好几个小时。
但是DooD比DinD有个优势,就是可以挂载宿主机的目录进行共享,特别适合需要下载包的缓存目录。

二、Gitlab Runner中设置目录共享

我们以DooD为例,要实现在Runner容器中挂载镜像,需要在gitlab-runner的配置中进行设置。
配置文件 /etc/gitlab-runner/config.toml
其中的volume字段设置成如下:

 volumes = ["/var/run/docker.sock:/var/run/docker.sock", "/cache", "/data/cache/go/pkg/mod/:/go/pkg/mod/"]

然后需要重启gitlab-runner

systemctl restart gitlab-runner

三、效果

我们从宿主机目录中可以看到已经缓存的包,构建过程确实节省了不少。

四、各种语言缓存目录

golang:1.18 官方镜像中GOPATH="/go",他的包缓存目录是:$GOPATH/pkg/mod 。
node:18 官方镜像中,npm缓存目录是 cache = "/root/.npm" 。

转载请注明:IPCPU-网络之路 » 使用gitlab CICD构建Docker镜像中的go语言缓存

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址