有文章使用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。