前段时间将jenkins切换到serverless,原本都是基于docker 挂载sock文件进行构建的,然后上了serverless之后发现没有物理节点了,也不能使用docker这种方式。还好google提供了一种不需要特权就可以构建的docker镜像构建工具kaniko
https://github.com/GoogleContainerTools/kaniko
使用方式很简单,我在jenkinsfile里面是这么使用的
/kaniko/executor --force --cache=true --cache-dir=/cache -c `pwd` --dockerfile=./Dockerfile --destination=${image}:latest
但是遇到一个问题,每次镜像都需要重新拉取,即使我设置了--cache=true这个目录,也没有任何缓存数据保存做下来,后来发现这个缓存只是使用缓存,而自己无法主动缓存
官方文档中说明了缓存基础镜像
https://github.com/GoogleContainerTools/kaniko#caching
如下命令就可以了,实际使用的时候需要加-f选项才会在缓存目录缓存基础镜像,直接启动debug镜像,手动缓存基础镜像就可以了
warmer:latest --cache-dir=/cache --image=<image to cache>
一个镜像会在目录下保存2个问题,一个是json的描述文件
image.png
官方提供了debug镜像 ,有个小技巧,gcr.io的镜像可以使用微软的国内源
http://mirror.azure.cn/help/gcr-proxy-cache.html
gcr.io/kaniko-project/executor:debug
gcr.azk8s.cn/kaniko-project/executor:debug