有文章使用gitlab-runner往k8s上发送curl命令实现pod中容器使用的镜像版本更新,地址:https://www.cnblogs.com/sanduzxcvbnm/p/14680979.html可知,中间有一步需要往dockerhub仓库推送镜像,executor执行器docker拉取镜像。
那么能不能改成从本地或者从私有仓库拉取镜像呢,这个是可以的。
在将GitLab Runner注册到GitLab page上,让GitLab page可以和你的Runner通信时,有一步是填写使用的executor
输入Runner的executor:
Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:
如果你选择Docker作为Runner的executor,你还要选择默认的docker image来运行job(当然,你也可以在.gitlab-ci.yml里指明你需要用的image),这句话就跟文章使用gitlab-runner往k8s上发送curl命令实现pod中容器使用的镜像版本更新,地址:https://www.cnblogs.com/sanduzxcvbnm/p/14680979.html 开头讲述的那样,不过.gitlab-ci.yml里指明的image优先级高。
注册完成后你可以在/etc/gitlab-runner里发现 config.toml文件,该文件是Runner的配置文件
接下来就牵涉到一个重要的话题 —— Executor
-
Shell Executor
以宿主机作为Runner的所有jobs的执行器。Runner将会从远程仓库pull你的工程,工程的目录为:/builds。如果你使用了cache,那么cache将会存在/cache/。
但是,它需要将构建所需的所有依赖手动安装到安装了Runner的同一台计算机上,比如使用到的git,jdk,maven,docekr等 -
Docker Executor
所有jobs的执行环境为指定的docker image所生成的container,每个job都会生成一个container并且在job结束后立即销毁。这个说的就是config.toml文件和.gitlab-ci.yml中指定的image
Docker executor默认将所有的builds存储在/builds/(这里的路径是container里的路径,Runner配置文件config.toml里的build_dir字段可以重新指明build的目录,默认对应于宿主机的目录是在宿主机的docker volume下:/var/lib/docker/volumes//_data/),默认将所有的caches存储在container里的/cache目录(config.toml里的cache_dir字段可以重新指明cache的目录),注意build_dir和cache_dir指向的均是container里的目录,要想将container里的数据持久化,需要用到volumes字段,这个字段的使用和docker volume的使用是类似的,只需在config.toml的[runner.docker]部分添加volumes = ["/cache", ":rw"]即可实现container里/cache目录数据的永久保存以及将host目录挂载到相应的container目录并具有读写的功能。
比如:
# 仅作展示,未显示完整
[runners.docker]
image = "jdd.io/jre:1.8.275"
volumes = ["/cache","/run/docker.sock:/run/docker.sock"]
当你使用docker 或 docker+machine executors时,你可以通过设置pull_policy来决定Runner如何pull docker image。pull_policy有三种值:
always —— Runner始终从远程pull docker image。
if-not-present —— Runner会首先检查本地是否有该image,如果有则用本地的,如果没有则从远程拉取。
never —— Runner始终使用本地的image。
注意:这一步就是本文开头提到的,使用本地镜像,不用再从dockerhub上拉取了
# 仅作展示,未显示完整
[runners.docker]
image = "jdd.io/jre:1.8.275"
pull_policy="if-not-present" # 添加这个选项就可以了
volumes = ["/cache","/run/docker.sock:/run/docker.sock"]
当你使用docker, docker+machine 或 kubernetes作为executor时,GitLab Runner将会使用特定的container来处理Git、artifacts 和cache 操作。通过在宿主机中键入以下命令:docker images
你会发现一些特殊的images,如:gitlab/gitlab-runner-helper:6_64-54944146
当然,也可以通过配置config.toml里的helper_image字段来让Runner使用你自己定制化的helper image。