水晶命匣 · 程式 ·

如何製作和使用GitLab Runner的Docker鏡像

GitLab Runner是一個開源項目,用來執行用戶的任務,然後將執行結果返回給GitLab伺服器。GitLab Runner可以和GitLab的CI/CD機制結合使用,後者是開源的持續集成/持續交付服務。本文將以自建的CentOS鏡像為基礎,構建GitLab Runner的Docker鏡像,實現CI/CD服務的快速部署。

一、環境描述

1. 虛擬機配置

  • CPU:雙核

  • 內存:4 GB

  • 硬碟:120 GB

  • IP:192.168.190.128

2. 作業系統

  • 版本:CentOS 7.4 x86_64 (1708)

  • 安裝方式:Minimal

3. Docker

  • 版本:1.12.6

  • 安裝方式:參考《如何通過yum安裝Docker和Docker-Compose》

4. 基礎鏡像

  • 名稱:registry.cn-hangzhou.aliyuncs.com/ghoulich-centos/centos-7.3-basic

  • 製作方式:參考《如何創建CentOS系統的Docker基礎鏡像》

5. GitLab

  • 版本:GitLab CE 10.5.3

  • 安裝方式:參考《如何安裝和漢化GitLab伺服器》

  • URL:http://10.15.1.248

6. GitLab Runner

  • 版本:10.5.0

  • 安裝方式:yum

二、構建鏡像

1. 新建Dockerfile文件

在shell中運行以下命令:

cd /root/Downloads
vi Dockerfile

Dockerfile文件的內容,如下所示:

# 使用自建的CentOS 7.3基礎鏡像
FROM registry.cn-hangzhou.aliyuncs.com/ghoulich-centos/centos-7.3-basic

# 鏡像維護者
MAINTAINER ghoulich@aliyun.com

# 添加GitLab的官方源
RUN curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash

# 添加epel軟體源
RUN yum install -y epel-release

# 安裝GitLab Runner和Supervisor
RUN yum install -y gitlab-runner supervisor

# 拷貝Supervisor配置文件
RUN rm -rf /etc/supervisord.conf
COPY supervisord.conf /etc/supervisord.conf

# 掛載配置文件目錄
VOLUME ["/etc/gitlab-runner", "/home/gitlab-runner"]

# 自啟動Supervisor
CMD ["/usr/bin/supervisord"]

上述文件的注釋說明了製作鏡像的每一步操作。注意,本文使用supervisor來管理容器中運行的服務,它是一個Linux進程控制系統。

2. 新建supervisord.conf文件

在shell中運行以下命令:

vi supervisord.conf

supervisord.conf文件的內容,如下所示:

[supervisord]
nodaemon=true

[program:gitlab-runner]
command=/usr/bin/gitlab-runner "run" "--working-directory" "/home/gitlab-runner" "--config" "/etc/gitlab-runner/config.toml" "--service" "gitlab-runner" "--syslog" "--user" "gitlab-runner"

上述文件是supervisor的配置文件,其中:

  • [supervisord]:用來定義supervisord服務端進程的參數,本文只配置nodaemon=true,表示以後台守護進程運行。

  • [program:gitlab-runner]:用來定義需要管理的子進程,本文將gitlab-runner服務進程交給supervisor管理,command參數表示啟動服務的命令路徑。

3. 構建鏡像

在shell中運行以下命令:

docker build -t gitlab-runner:10.5.0 .

上述命令將鏡像的本地標籤設置為gitlab-runner:10.5.0。

三、上傳鏡像

在shell中運行以下命令,獲取GitLab Runner本地鏡像的標識符:

docker images

上述命令的返回信息,如下圖所示:

查看Docker鏡像

由上圖可知,GitLab Runner本地鏡像的標識符是 4a2f2a3e6251,下面為鏡像創建標籤時需要用到。注意,每次構建鏡像得到的標識符是不同的。

本文的GitLab Runner鏡像倉庫託管在阿里雲,在shell中運行以下命令,將鏡像推送至阿里云:

# 登錄阿里雲鏡像庫
docker login --username=ghoulich@aliyun.com registry.cn-hangzhou.aliyuncs.com
# 為本地鏡像創建標籤
docker tag 4a2f2a3e6251 registry.cn-hangzhou.aliyuncs.com/ghoulich-centos/gitlab-runner:10.5.0
# 推送鏡像
docker push registry.cn-hangzhou.aliyuncs.com/ghoulich-centos/gitlab-runner:10.5.0

四、啟動容器

1. 創建目錄

在shell中運行以下命令,創建目錄:

mkdir -p /usr/local/gitlab-runner/config /usr/local/gitlab-runner/data

上述的兩個目錄會掛載至容器中,前者用於存放配置文件,後者用於存放數據。

2. 啟動容器

在shell中運行以下容器,啟動GitLab Runner容器:

docker run --detach \
 --name gitlab-runner \
 --hostname gitlab-runner \
 --restart always \
 --volume /usr/local/gitlab-runner/config:/etc/gitlab-runner \
 --volume /usr/local/gitlab-runner/data:/home/gitlab-runner \
 registry.cn-hangzhou.aliyuncs.com/ghoulich-centos/gitlab-runner:10.5.0

上述命令的各個選項,含義如下所示:

  • --detach:以後台模式運行容器;

  • --name--hostname:將容器的名稱和主機名都設置為gitlab-runner;

  • --restart:當容器退出時總是重新啟動;

  • --volume:掛載容器的配置目錄和數據目錄。

五、註冊Runner

在shell中運行以下命令,將容器化的GitLab Runner註冊至GitLab伺服器:

docker exec -it gitlab-runner gitlab-runner register

根據命令行提示,逐步填寫必要的註冊信息,如下圖所示:

註冊GitLab Runner

註冊Runner需要填寫以下信息:

  • gitlab-ci協調器的地址,通常是GitLab伺服器的地址;

  • gitlab-ci的註冊令牌,通常能在GitLab的項目管理頁面或系統配置頁面找到;

  • 待註冊Runner的描述,通常就是給Runner起名;

  • 待註冊Runner的標籤,可以設置多個標籤,以逗號分割;

  • 是否運行未打標籤的構建任務;

  • 是否將待註冊的Runner鎖定至當前項目。

請根據實際情況填寫上述註冊信息。如果註冊成功,那麼可以在GitLab伺服器的Runner配置頁面中看到剛剛註冊的GitLab Runner,如下圖所示:

查看GitLab Runner的狀態

至此,GitLab Runner的Docker鏡像便製作完成了,本文還啟動了一個簡單的Runner容器,如果需要使用git、maven等其他工具,可以在容器中自行安裝!

聲明:文章觀點僅代表作者本人,PTTZH僅提供信息發布平台存儲空間服務。
喔!快樂的時光竟然這麼快就過⋯