如何制作和使用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

4. 基础镜像

5. GitLab

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等其他工具,可以在容器中自行安装!