docker ---- gitlab-runner
本文以 gitlab/gitlab-runner:alpine-v14.1.0
为例实践;
1.搭建gitlab-runner容器
1.拉取镜像
sudo docker pull gitlab/gitlab-runner:alpine-v14.1.0
2.创建 Runner 容器
-
通过配置文件目录
mkdir ~/gitlab-runner/config
-
通过命令直接创建容器
docker run -d \ --name gitlab-runner-docker \ --restart always \ -v /var/run/docker.sock:/var/run/docker.sock \ -v ~/gitlab-runner/config:/etc/gitlab-runner \ gitlab/gitlab-runner:alpine-v14.1.0
-
或-通过配置文件创建容器
创建一个
config-compose
目录,然后新建一个docker-compose.yml
文件,内容如下:version: "3" services: app: image: gitlab/gitlab-runner:alpine-v14.1.0 container_name: gitlab-runner-docker restart: always volumes: - ~/gitlab-runner/config:/etc/gitlab-runner - /var/run/docker.sock:/var/run/docker.sock
在
config-compose
目录下执行docker-compose up --build -d
命令,docker ps -a
即可看见刚才创建的容器,同时目录下会生成一个config
目录,用于存放Runner
的配置文件;
3.注册 Runner
1.获取相应配置信息
在 GitLab
的仓库 Setting -> CI/CD
设置页面中,展开 Runners
部分,即可看到生成的URL
、 Token
,复制粘贴即可
2.配置相应信息
docker exec -it gitlab-runner-docker gitlab-runner register
-
输入
GitLab
的地址Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com ) https://gitlab.com/ # 此处填写URL信息,项目实际信息
-
输入
Token
来注册Runner
Please enter the gitlab-ci token for this runner xxxToken # 此处填写Token信息,项目实际信息
-
输入
Runner
的描述可以在
GitLab
管理页面进行修改;Please enter the gitlab-ci description for this runner my-runner-desc
-
输入
Runner
关联的标签可以在
GitLab
管理页面进行修改;Please enter the gitlab-ci tags for this runner (comma separated): my-tag,another-tag # 逗号分隔,用于检索的
-
Enter the Runner executor
GitLab Runner
内置了多种executor
,不同类型的executor
的区别,可以参考文档:Executors ;我们是在docker上跑,这里选择填写
docker
就行;Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell: docker
-
Enterthe Docker image
而这一步需要指定的默认镜像,就是当
.gitlab-ci.yml
文件中没有指定任务需要的镜像时使用的;推荐使用
tico/docker
作为默认镜像,个人配置时使用了默认镜像;Please enter the Docker image (eg. ruby:2.1): docker:stable
-
注册成功
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
3.查看 Runner配置、修改
详情见:
advanced-configuration ;
use-docker-in-docker-executor;
gitlab-runner 的 executors 之 docker;
理论上修改配置文件,docker restart gitlab-runner-docker
即可,当前记录时,尚未实践修改配置并生效;
配置默认在 ~/gitlab-runner/config
下,配置文件更改时不需要重启服务,每隔三秒 GitLab Runner 会检查配置修改,并重新加载;
进入 ~/gitlab-runner/config
目录,会发现一个 config.toml
文件,里面是 gitlab-runner
相关的配置信息;
以下配置将注册一个使用 docker:stable
镜像的 Runner,它使用 privileged
模式启动构建和服务容器。这也是使用 docker-in-docker
模式必须使用的设置:
concurrent = 1
check_interval = 0
[session_server]
session_timeout = 1800
[[runners]]
name = "long-gitlab-runner"
url = "https://gitlab.com/"
token = "xxxToken"
executor = "docker"
[runners.custom_build_dir]
[runners.cache]
[runners.cache.s3]
[runners.cache.gcs]
[runners.cache.azure]
[runners.docker]
tls_verify = false
image = "docker:stable"
privileged = true
disable_entrypoint_overwrite = false
oom_kill_disable = false
disable_cache = false
volumes = ["/cache"]
shm_size = 0
2.测试实践
使用.gitlab-ci.yml
配置你的项目;
stages:
- build
- test
build:
stage: build
script: echo "Building the app"
test:
stage: test
script: echo "Running tests"
提交或保存以上配置,触发流水线执行,在流水线执行过程中可能出现以下问题;
3. 问题修复
1.This job is stuck, because the project doesn‘t have any runners online assigned to it.
2.error during connect: Post http://docker:2375/v1.39/auth: dial tcp: lookup docker on 183.60.83.19:53: no such host
在流水线中进行 docker
登录操作时,即 docker login -u username -p password
时,可能出出现当前错误情况;
解决方法:
- 进入到
gitlab runner
的配置目录下,即config.toml
所在目录,cd ~/gitlab-runner/config
; - 修改
gitlab runner
配置,即runners.docker
,即vi config.toml
;
privileged = true
volumes = ["/cache", "/var/run/docker.sock:/var/run/docker.sock"]
为什么这样修改:
添加 /var/run/docker.sock:/var/run/docker.sock
允许在内部运行的 docker容器 gitlab-runner
访问外部(主机)docker 守护进程。如果没有这个,它会尝试连接到 docker默认 URL,即 http://docker:2375
. 此 URL 无法通过 DNS 解析(在我的情况下183.60.83.19:53,DNS 服务器是 ,DNS 标准端口是 53),因此 docker 会打印上面列出的错误消息;