使用gitlab-ci进行持续集成的时候,要注册一个gitlab-runner,注册gitlab-runner又要指定一个执行器。执行器有那么几种:
1
这其中,比较简单常用的就是shell执行器,往上有很多资料,这里不再重复。而docker执行器是一个相对用的比较少的执行器,因为docker执行器要和docker配合使用,因此用的人比较少吧。
现象:
仿造官方文档上的写法,在.gitlab.yml文件中指定一个镜像文件,用以编译和运行我们的项目,如图:
2
这个写法的本意是想使用本地的镜像,mytomcat:v1
3
作为编译和运行我们的项目的镜像。但是这个时候进行持续集成的话会报一个错:
4
当pipeline开始的时候,gitlab-runner没有用本地已经存在的mytomcat:v1这个镜像,而是直接去docker中央仓库pull这个镜像,这自然是找不到的,所以就报错了。这是为什么呢?
解释及解决方法
1.解释
这是docker执行器的pull policy导致的,这个pull policy的文档在官方文档上排的比较靠后,甚至有点不起眼,这一点是很坑的,明明是跟着官方文档做,但是却是错了,还错得莫名其妙的。
5
可以点进去看一下:
6
这就很明显了,如果你想要指定本地镜像的话,那就要制定pull policy,否则默认设置pull_policy="always",意味着gitlab-runner每次都要去docker中央仓库拉image关键字指明的镜像,这也就是这个问题的解释了。
2.解决方法
制定pull policy,再重启gitlab-runner就好了。如图:
6
3.结果
7
pull policy生效,使用的是本地的镜像。