8. 在容器中運行 GitLab Runner

原文鏈接: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-runnerdocker run [docker options] gitlab/gitlab-runner 替換,而 Runner 命令的其余部分保留,就像 注冊文檔 中描述的那樣。唯一的區(qū)別是 gitlab-runner 命令是在 Docker 容器內(nèi)執(zhí)行的。

Docker 鏡像的安裝和配置

  1. 首先安裝 Docker:
curl -sSL https://get.docker.com/ | sh
  1. 你需要將配置卷安裝到 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
  1. 按照 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)的安全性。

處理此類配置時必須特別小心。

  1. 如果要使用 Docker 執(zhí)行程序在容器中運行構(gòu)建,需要訪問 /var/run/docker.sock。但是,如果您在執(zhí)行模式下存在 SELinux,則在訪問 /var/run/docker.sock 時會看到權(quán)限被拒絕。需要安裝 selinux-dockersock 解決該問題:https://github.com/dpw/selinux-dockersock。
  2. 請確保在主機上創(chuàng)建了一個永久目錄:mkdir -p /srv/gitlab-runner/config
  3. 在卷中使用 :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/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容