原文鏈接:https://docs.gitlab.com/runner/install/docker.html
本文描述的是如何在 Docker 容器中運行 GitLab Runner 的方法。
通常的 GitLab Runner Docker 鏡像用法
GitLab Runner 的 Docker 鏡像(基于 Ubuntu 或 Alpine Linux)被設(shè)計為圍繞標準 gitlab-runner 命令的包裝器,就像 GitLab Runner 直接安裝在主機上一樣。
一般規(guī)則是每個 GitLab Runner 命令通常會執(zhí)行為:
gitlab-runner [Runner command and options...]
可以執(zhí)行為:
docker run [chosen docker options...] gitlab/gitlab-runner [Runner command and options...]
例如,想要獲取 GitLab Runner 命令的頂級幫助信息可以執(zhí)行:
docker run --rm -t -i gitlab/gitlab-runner --help
NAME:
gitlab-runner - a GitLab Runner
USAGE:
gitlab-runner [global options] command [command options] [arguments...]
VERSION:
10.7.0 (7c273476)
(...)
簡而言之,命令 gitlab-runner 被 docker run [docker options] gitlab/gitlab-runner 替換,而 Runner 命令的其余部分保留,就像 注冊文檔 中描述的那樣。唯一的區(qū)別是 gitlab-runner 命令是在 Docker 容器內(nèi)執(zhí)行的。
Docker 鏡像的安裝和配置
- 首先安裝 Docker:
curl -sSL https://get.docker.com/ | sh
- 你需要將配置卷安裝到
gitlab-runner容器中以用于配置和其他資源:
docker run -d --name gitlab-runner --restart always \
-v /srv/gitlab-runner/config:/etc/gitlab-runner \
-v /var/run/docker.sock:/var/run/docker.sock \
gitlab/gitlab-runner:latest
??提示:在 macOS 系統(tǒng)中,使用
/Users/Shared代替/srv。
或者,您也可以使用配置容器來裝入自定義數(shù)據(jù)卷:
docker run -d --name gitlab-runner-config \
-v /etc/gitlab-runner \
busybox:latest \
/bin/true
然后,運行 Runner:
docker run -d --name gitlab-runner --restart always \
-v /var/run/docker.sock:/var/run/docker.sock \
--volumes-from gitlab-runner-config \
gitlab/gitlab-runner:latest
- 按照 Docker section of Registering Runners 中的說明注冊剛剛啟動的 Runner。
請務(wù)必閱讀 FAQ 部分,其中介紹了GitLab Runner的一些最常見問題。
更新
拉取 gitlab/gitlab-runner 最新版本:
docker pull gitlab/gitlab-runner:latest
停止并刪除現(xiàn)有容器:
docker stop gitlab-runner && docker rm gitlab-runner
像原來一樣啟動容器:
docker run -d --name gitlab-runner --restart always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /srv/gitlab-runner/config:/etc/gitlab-runner \
gitlab/gitlab-runner:latest
注意:您需要使用與最初安裝數(shù)據(jù)卷相同的方法(
-v /srv/gitlab-runner/config:/etc/gitlab-runner或者--volumes-from gitlab-runner-config)。
查看 GitLab Runner 日志
當(dāng) GitLab Runner 作為前臺任務(wù)啟動時(無論是本地安裝的二進制文件還是 Docker 容器內(nèi)),日志都會打印到標準輸出。
當(dāng) GitLab Runner 作為系統(tǒng)服務(wù)啟動時(例如使用 Systemd),在大多數(shù)情況下,日志通過 Syslog 或其他系統(tǒng)日志記錄機制記錄。
當(dāng) GitLab Runner 作為基于 Docker 的服務(wù)啟動時,因為 gitlab-runner ... 命令是容器的主要進程,所以可以使用 docker logs 命令讀取日志。
例如,如果使用以下命令啟動 GitLab Runner:
docker run -d --name gitlab-runner --restart always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /srv/gitlab-runner/config:/etc/gitlab-runner \
gitlab/gitlab-runner:latest
您可以通過以下方式獲取日志:
docker logs gitlab-runner
其中 gitlab-runner 是啟動 GitLab Runner 時,用第一個命令 --name gitlab-runner 設(shè)置的容器名稱。
您可以在 Docker文檔頁面 上找到有關(guān)處理容器日志的更多信息。
安裝受信任的 SSL 服務(wù)器證書
如果您(自搭建的)的 GitLab CI 服務(wù)使用自簽名 SSL 證書,那么您應(yīng)確保 gitlab-runner 容器信任 GitLab CI 服務(wù)器證書,以便它們能夠相互通信。
gitlab/gitlab-runner 鏡像被配置為在 /etc/gitlab-runner/certs/ca.crt 中查找受信任的 SSL 證書,但是可以使用 -e "CA_CERTIFICATES_PATH=/DIR/CERT" 配置選項來更改。
將 ca.crt 文件復(fù)制到數(shù)據(jù)卷(或容器)上的 certs 目錄中。ca.crt 文件應(yīng)包含您希望 gitlab-runner 信任的所有服務(wù)器的根證書。gitlab-runner 容器將在啟動時導(dǎo)入 ca.crt 文件,因此如果您的容器已在運行,則可能需要重新啟動它才能使更改生效。
Docker 鏡像
鏡像源 gitlab/gitlab-runner:latest 基于 Ubuntu 系統(tǒng),請參閱 gitlab-org/gitlab-runner 源代碼,了解 Ubuntu 和 Alpine 鏡像的可能構(gòu)建說明。
您也可以使用用于 Alpine Linux 系統(tǒng)下的名為 gitlab/gitlab-runner:alpine 的鏡像,它占用空間小得多(Ubuntu 系統(tǒng)下大約 400 MB vs Alpine 系統(tǒng)下大約 100 MB )。
SELinux
一些發(fā)行版(CentOS,RedHat,F(xiàn)edora)默認使用 SELinux 來增強底層系統(tǒng)的安全性。
處理此類配置時必須特別小心。
- 如果要使用 Docker 執(zhí)行程序在容器中運行構(gòu)建,需要訪問
/var/run/docker.sock。但是,如果您在執(zhí)行模式下存在 SELinux,則在訪問/var/run/docker.sock時會看到權(quán)限被拒絕。需要安裝selinux-dockersock解決該問題:https://github.com/dpw/selinux-dockersock。 - 請確保在主機上創(chuàng)建了一個永久目錄:
mkdir -p /srv/gitlab-runner/config。 - 在卷中使用
:Z運行 Docker。
docker run -d --name gitlab-runner --restart always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /srv/gitlab-runner/config:/etc/gitlab-runner:Z \
gitlab/gitlab-runner:latest
有關(guān)原因和解決方案的更多信息,請點擊此處:http://www.projectatomic.io/blog/2015/06/using-volumes-with-docker-can-cause-problems-with-selinux/