本文由 简悦 SimpRead 转码, 原文地址 www.jianshu.com
使用 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 就好了。如图:
63. 结果
7pull policy 生效,使用的是本地的镜像。







