GitLab Runner 官方文档:https://docs.gitlab.com/runner/
支持以下运行环境:详情见上述文档。
Install using GitLab’s repository for Debian/Ubuntu/CentOS/RedHat (preferred).
Install on GNU/Linux manually (advanced).
Install on macOS.
Install on Windows.
Install as a Docker service.
Install in autoscaling mode using Docker machine.
Install on FreeBSD.
Install on Kubernetes.
Install the nightly binary manually (development).
Register GitLab Runner
明确概念:Docker in docker。runner部署在docker 容器中作为外层的docker,register GitLab Runner的时候会让你选一个default Docker image这个就是里面的运行docker,是具体执行.gitlab-ci.yml命令的容器。
注册详细过程:
gitlab-ci coordinator
前面两步的gitlab-ci coordinator URL和token都在gitlab-setting-CI/CD-Runners (Set up a specific Runner manually)处找到;
gitlab-ci tags
gitlab-ci tags在执行环境Runtime platform: arch=amd64 os=linux pid=33 revision=ac8e767a version=12.6.0
中应该是只能用docker
tag,试过其他的tag,runner api 都返回500,NETWork Error。猜测是该版本的bug的。这里的tag要与.gitlab-ci.yml中的tag一致,不然runner找不到预定义的pipline。
enter the executor:选择docker;接下来就会选一个the default Docker image:docker:latest,这里有个坑:the default Docker image如果用私有仓库的的话,只支持s3, gcs两种鉴权方式:
https://docs.gitlab.com/runner/configuration/advanced-configuration.html#using-a-private-container-registry
因此这里选用的docker hubbor的docker:latest;
the default Docker image只是个备用镜像;这个可以在.gitlab-ci.yml声明指定(images),优先使用yaml文件中的这个image.
至此,docker in docker注册完成。
在跑ci的时候还有些坑:
Docker in docker模式,
报错:
error during connect: Post http://docker:2375/v1.40/auth: dial tcp: lookup docker on 10.38.193.12:53: no such host
需要打开privileged mode:
https://docs.gitlab.com/runner/executors/docker.html#use-docker-in-docker-with-privileged-mode
First, configure your Runner (config.toml) to run in privileged mode:
[[runners]]
executor = "docker"
[runners.docker]
privileged = true
Then, make your build script (.gitlab-ci.yml) to use Docker-in-Docker container:
image: docker:git
services:
- docker:dind
build:
script:
- docker build -t my-image .
- docker push my-image
报错:
Cannot connect to the Docker daemon at tcp://docker:2375. Is the docker daemon running?
此时还专门本地拉了个镜像,执行了下docker命令,无报错,查文档后,docker镜像19版本以上会有这个问题:https://gitlab.com/gitlab-org/gitlab-foss/issues/64959
Hotfix for runners “you” control:
config.toml
[[runners]]
environment = ["DOCKER_TLS_CERTDIR="]
Hotfix for projects “you” control:
.gitlab-ci.yml
variables:
DOCKER_TLS_CERTDIR: ""
或者使用低版本:
image: docker:18-git
services:
- docker:18-dind
最后附上常用三板斧:
gitlab runner 安装:
docker run -d --name yapi-gitlab-runner --restart always -v /srv/gitlab-runner/config1:/etc/gitlab-runner -v /var/run/docker.sock:/var/run/docker.sock gitlab/gitlab-runner:latest
修改完/srv/gitlab-runner/config配置后重启:docker restart [container id]
将gitlab项目注册到在运行的runner容器(842471cead2e):
docker exec -it 842471cead2e gitlab-runner register