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
上述命令的返回信息,如下图所示:
由上图可知,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
根据命令行提示,逐步填写必要的注册信息,如下图所示:
注册Runner需要填写以下信息:
- gitlab-ci协调器的地址,通常是GitLab服务器的地址;
- gitlab-ci的注册令牌,通常能在GitLab的项目管理页面或系统配置页面找到;
- 待注册Runner的描述,通常就是给Runner起名;
- 待注册Runner的标签,可以设置多个标签,以逗号分割;
- 是否运行未打标签的构建任务;
- 是否将待注册的Runner锁定至当前项目。
请根据实际情况填写上述注册信息。如果注册成功,那么可以在GitLab服务器的Runner配置页面中看到刚刚注册的GitLab Runner,如下图所示:
至此,GitLab Runner的Docker镜像便制作完成了,本文还启动了一个简单的Runner容器,如果需要使用git、maven等其他工具,可以在容器中自行安装!