本文主要演示使用A发布项目到 B上,和注册GitLab Runner,添加docker类型的Executor来执行构建,并以此为基础完成一个go源码示例项目从编译代码构建、docker镜像打包到应用部署的CI/CD过程。
A:192.168.10.12 gitlabrunner
B:192.168.10.19 端口2375 需要发布的目标
Gitlab ip:192.168.10.9
一、在192.168.10.12上使用docker安装gitlab-runner
[root@adscom gitlab]# mkdir -p /config #创建配置目录
[root@adscom data]# docker pull gitlab/gitlab-runner:v14.6.1 #拉取gitlab-runner镜像
[root@adscom ~]# docker run -d --name my-runner -v /config/:/etc/gitlab-runner gitlab/gitlab-runner:v14.6.1 #启动容器
[root@adscom ~]# docker exec -it my-runner bash #进入容器
二、登录GitLab注册信息
1 获取注册token信息
2 在192.168.10.12上进行非交互式注册gitlab-runner
需要进入到gitlab-runner容器中
bash-5.0# gitlab-runner register \
--non-interactive \
--executor "docker" \
--docker-image golang:1.17.6-alpine3.15 \
--url "http://192.168.10.9/" \
--registration-token "mNaxzsqyxpwQQCxJkSTa" \
--description "docker-my111" \
--tag-list "testrunner1" \
--run-untagged="true" \
--locked="false" \
--access-level="not_protected"
可在GitLab上看到注册成功的GitLab Runner,如下图所示。
三、缓存配置
GitLab Runner对缓存方案的支持有限,所以
可以通过修改config.toml,需要使用挂载Volume的方式做缓存。
root@ubuntu:/config# pwd
/config
vim config.toml
Docker in Docker
Docker技术目前在DevOps中被广泛使用,我们需要将测试或者构建的代码和自动化脚本打包成Docker镜像,然后部署在各运行环境中。而在CI/CD中,我们常用一些CI/CD服务器,比如Jenkins和GoCD来构建与部署我们的应用,从而实现CI/CD的自动化。现在一些CI/CD服务器也被Docker化运行在真实的物理机上。于是我们需要在CI/CD服务器的Docker container里面来构建(build)与运行(run)我们的Docker镜像,这就涉及到"Docker run Docker"的问题。
一个很自然的想法是,我们是不是需要在CI/CD服务器镜像中安装一个Docker Daemon和Docker命令呢?但是Docker里面跑Docker总感觉有些蹩脚,额外安装与运行Docker无疑增加了CI/CD服务器镜像的大小,同时还增加Docker的深度。
实际上,我们并不需要在CI/CD服务器上安装Docker。通过如下的命令在CI/CD服务器上运行我们的镜像:
volumes = ["/var/run/docker.sock:/var/run/docker.sock","/cache"]
也可以在注册时加入(官方的方法):
gitlab-runner register \
--non-interactive \
--executor "docker" \
--docker-image golang:1.1