当使用GitLab CI的流水线功能时,可能需要新增项目打包的阶段,此时就要用到Maven或Gradle进行打包。本文将介绍如何以GitLab Runner的镜像为基础,构建集成Maven功能的Docker镜像,然后再简单介绍如何启动和使用Maven容器。
一、环境描述
1. 虚拟机配置
- CPU:单核
- 内存:2 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. GitLab服务器
- 版本:GitLab CE 10.5.4
- 安装方式:参考《如何安装和汉化GitLab服务器》
5. GitLab Runner
- 版本:10.5.0
- 制作方式:参考《如何制作和使用GitLab Runner的Docker镜像》
二、构建镜像
1. 创建Dockerfile文件
在shell中运行以下命令:
cd /root/Downloads
vi Dockerfile
Dockerfile的内容,如下所示:
# 使用自建的GitLab Runner镜像
FROM registry.cn-hangzhou.aliyuncs.com/ghoulich-centos/gitlab-runner:10.5.0
# 镜像维护者
MAINTAINER ghoulich@aliyun.com
# 安装wget
RUN yum install -y wget
# 安装Maven
RUN wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo
RUN yum -y install apache-maven
# 清理系统
RUN yum clean all
每个构建步骤的用途,都在注释中有所说明,本文不再赘述。
2. 构建镜像
在shell中运行以下命令:
docker build -t gitlab-maven-runner:3.5.2 .
构建完成之后,查看新建Docker镜像的信息,如下图所示:
3. 上传镜像
本文将Docker镜像交给阿里云托管,在shell中运行以下命令,上传镜像:
# 登录阿里云镜像库
docker login --username=ghoulich@aliyun.com registry.cn-hangzhou.aliyuncs.com
# 为本地镜像创建标签
docker tag gitlab-maven-runner:3.5.2 registry.cn-hangzhou.aliyuncs.com/ghoulich-centos/gitlab-maven-runner:3.5.2
# 推送镜像
docker push registry.cn-hangzhou.aliyuncs.com/ghoulich-centos/gitlab-maven-runner:3.5.2
请根据实际情况,修改上述命令中的用户名和仓库名。
三、启动package-runner容器
在shell中运行以下命令,启动一个专用于打包的容器:
mkdir -p /usr/local/gitlab-runner/data
mkdir -p /usr/local/gitlab-runner/config/package
docker run --detach \
--name package-runner \
--hostname package-runner \
--restart always \
--volume /usr/local/gitlab-runner/config/package:/etc/gitlab-runner \
--volume /usr/local/gitlab-runner/data:/home/gitlab-runner \
--env JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.161-0.b14.el7_4.x86_64 \
registry.cn-hangzhou.aliyuncs.com/ghoulich-centos/gitlab-maven-runner:3.5.2
上述命令将容器的名称设置为package-runner,将容器的配置文件目录/etc/gitlab-runner
挂载至宿主机的/usr/local/gitlab-runner/config/package
目录,将容器的数据目录/home/gitlab-runner
挂载至宿主机的/usr/local/gitlab-runner/dat
目录。
四、注册Runner实例
GitLab Runner容器启动之后,必须去GitLab服务器进行注册,然后才能在流水线中使用。注册过程,如下图所示:
注册Runner需要填写以下信息:
- GitLab服务器的URL,本文设置为
http://10.15.1.248/
; - GitLab的注册令牌,通常能在GitLab的项目管理页面或系统配置页面找到,本文设置为
pDXW_tssA5NHa5K4zSY-
; - 待注册Runner的描述,本文设置为
package-runner
; - 待注册Runner的标签,可以设置多个标签(以逗号分割),本文设置为
maven
; - 是否运行未打标签的构建任务,本文设置为
false
; - 是否将待注册的Runner锁定至当前项目,本文设置为
false
; - 执行器的类型,本文设置为
shell
。
请根据实际情况填写上述注册信息。如果注册成功,那么可以在GitLab服务器的Runner配置页面中看到刚刚注册的GitLab Runner,如下图所示:
五、手动打包项目
接下来,本文尝试利用package-runner容器手动打包maven项目,检查该容器是否能够正常工作。假设GitLab服务器上有一个名为demo的项目,通过git工具拉取代码:
docker exec -it package-runner git clone http://10.15.1.248/yangbin/demo.git /home/gitlab-runner/demo
在shell中运行以下命令,手动打包demo项目:
docker exec -it package-runner mvn clean package -DskipTests -f /home/gitlab-runner/demo
经过漫长的等待,打包完成之后,运行得到的jar包,检查是否打包成功:
# 启动demo项目
docker exec --detach package-runner java -jar /home/gitlab-runner/demo/target/demo-0.0.1-SNAPSHOT.jar
# 访问示例服务
docker exec -it package-runner curl http://127.0.0.1:8080/hello
若上述最后一条命令的输出如下图所示,则表示打包成功:
至此,Maven的Docker镜像已经制作完成了,本文还启动了一个简单的Maven容器,通过一个示例,简单地演示了拉取源码和打包的功能!