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 [email protected]
# 添加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
上述命令的返回信息,如下圖所示:
由上圖可知,GitLab Runner本地鏡像的標識符是 4a2f2a3e6251,下面為鏡像創建標籤時需要用到。注意,每次構建鏡像得到的標識符是不同的。
本文的GitLab Runner鏡像倉庫託管在阿里雲,在shell中運行以下命令,將鏡像推送至阿里云:
# 登錄阿里雲鏡像庫
docker login [email protected] 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
根據命令行提示,逐步填寫必要的註冊信息,如下圖所示:
註冊Runner需要填寫以下信息:
-
gitlab-ci協調器的地址,通常是GitLab伺服器的地址;
-
gitlab-ci的註冊令牌,通常能在GitLab的項目管理頁面或系統配置頁面找到;
-
待註冊Runner的描述,通常就是給Runner起名;
-
待註冊Runner的標籤,可以設置多個標籤,以逗號分割;
-
是否運行未打標籤的構建任務;
-
是否將待註冊的Runner鎖定至當前項目。
請根據實際情況填寫上述註冊信息。如果註冊成功,那麼可以在GitLab伺服器的Runner配置頁面中看到剛剛註冊的GitLab Runner,如下圖所示:
至此,GitLab Runner的Docker鏡像便製作完成了,本文還啟動了一個簡單的Runner容器,如果需要使用git、maven等其他工具,可以在容器中自行安裝!