#docker #gitlab-ci #gitlab-ci-runner #rancher
#docker #gitlab-ci #gitlab-ci-runner #владелец ранчо
Вопрос:
Я пытался реализовать новый рабочий процесс CI с использованием GitlabCI, но теперь я не могу понять проблему. Я следовал этому документу и выбираю метод привязки сокета Docker.
Все запущено на одном компьютере, ранчерос :
$ uname -a
Linux xxx 4.2.8-ckt4-rancher #1 SMP Tue Apr 5 16:12:00 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
57801c725226 gitlab/gitlab-runner:latest "/usr/bin/dumb-init /" 14 hours ago Up 14 hours gitlab-runner
50e3a9dabe77 gitlab/gitlab-ce "/assets/wrapper" 17 hours ago Up 17 hours 80/tcp, 443/tcp, 0.0.0.0:1022->22/tcp gitlab
ed2b6d9a8ea7 jwilder/nginx-proxy "/app/docker-entrypoi" 6 days ago Up 3 days 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp proxy
Запустите команду контейнера бегуна
$ docker run -d --name gitlab-runner --restart always
-v ~/docker/gitlab-runner/config:/etc/gitlab-runner
-v /var/run/docker.sock:/var/run/docker.sock
gitlab/gitlab-runner:latest
Конфигурация бегуна
$ sudo cat ~/docker/gitlab-runner/config/config.toml
concurrent = 1
check_interval = 0
[[runners]]
name = "ITrancher, docker based runner 4"
url = "https://git.xxx.com"
token = "xxx"
executor = "docker"
[runners.docker]
tls_verify = false
image = "docker:latest"
privileged = false
disable_cache = false
volumes = ["/var/run/docker.sock:/var/run/docker.sock", "/cache"]
[runners.cache]
[runners.kubernetes]
host = ""
cert_file = ""
key_file = ""
ca_file = ""
image = ""
namespace = ""
privileged = false
cpus = ""
memory = ""
service_cpus = ""
service_memory = ""
Вот мой файл .gitlab-ci.yml
image: docker:latest
before_script:
- docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN registry.xxx.com
stages:
- build
build:
stage: build
script:
- docker build --pull -f Dockerfile-php -t registry.xxx.com/dev/kayako-php:latest .
- docker push registry.xxx.com/dev/kayako-php:latest
- docker build --pull -f Dockerfile-nginx -t registry.xxx.com/dev/kayako-nginx:latest .
- docker push registry.xxx.com/dev/kayako-nginx:latest
И это то, что я получаю в GitlabCI, когда сборка подключена
Running with gitlab-ci-multi-runner 1.6.1 (c52ad4f)
Using Docker executor with image docker:latest ...
ERROR: Failed to create container volume for /builds/dev write unix @->/var/run/docker.sock: write: broken pipe
ERROR: Preparation failed: write unix @->/var/run/docker.sock: write: broken pipe
Will be retried in 3s ...
Using Docker executor with image docker:latest ...
ERROR: Failed to create container volume for /builds/dev write unix @->/var/run/docker.sock: write: broken pipe
ERROR: Preparation failed: write unix @->/var/run/docker.sock: write: broken pipe
Will be retried in 3s ...
Using Docker executor with image docker:latest ...
ERROR: Failed to create container volume for /builds/dev write unix @->/var/run/docker.sock: write: broken pipe
ERROR: Preparation failed: write unix @->/var/run/docker.sock: write: broken pipe
Will be retried in 3s ...
ERROR: Build failed (system failure): write unix @->/var/run/docker.sock: write: broken pipe
И это результат, когда я пытаюсь запустить сборку локально с --debug
флагом внутри моего контейнера gitlab-runner.
# gitlab-runner --debug exec docker build
Runtime platform arch=amd64 os=linux revision=c52ad4f version=1.6.1
Running with gitlab-ci-multi-runner 1.6.1 (c52ad4f)
Shell configuration: environment: []
dockercommand:
- sh
- -c
- "if [ -x /usr/local/bin/bash ]; thenntexec /usr/local/bin/bash nelif [ -x /usr/bin/bash
]; thenntexec /usr/bin/bash nelif [ -x /bin/bash ]; thenntexec /bin/bash nelif
[ -x /usr/local/bin/sh ]; thenntexec /usr/local/bin/sh nelif [ -x /usr/bin/sh
]; thenntexec /usr/bin/sh nelif [ -x /bin/sh ]; thenntexec /bin/sh nelsentecho
shell not foundntexit 1nfinn"
command: bash
arguments: []
passfile: false
extension: ""
build=1 project=1
Using Docker executor with image docker:latest ...
Applying docker.Client transport fix: amp;{false 0xc820306810 <nil> 0xc820238320 unix:///var/run/docker.sock 0xc820232780 0xc820340ba0 [1 18] [] [] <nil>} host=unix:///var/run/docker.sock
Creating build volume... build=1 project=1
Looking for prebuilt image gitlab-runner-prebuilt-x86_64:c52ad4f ... build=1 project=1
Loading prebuilt image... build=1 project=1
Closed all idle connections for docker.Client: amp;{false 0xc820306900 <nil> 0x39d9ee0 unix:///var/run/docker.sock 0xc820232780 0xc820340ba0 [1 18] [1 22] [1 18] 0xc820306930}
ERROR: Preparation failed: write unix @->/var/run/docker.sock: write: broken pipe
Will be retried in 3s ...
Shell configuration: environment: []
dockercommand:
- sh
- -c
- "if [ -x /usr/local/bin/bash ]; thenntexec /usr/local/bin/bash nelif [ -x /usr/bin/bash
]; thenntexec /usr/bin/bash nelif [ -x /bin/bash ]; thenntexec /bin/bash nelif
[ -x /usr/local/bin/sh ]; thenntexec /usr/local/bin/sh nelif [ -x /usr/bin/sh
]; thenntexec /usr/bin/sh nelif [ -x /bin/sh ]; thenntexec /bin/sh nelsentecho
shell not foundntexit 1nfinn"
command: bash
arguments: []
passfile: false
extension: ""
build=1 project=1
Using Docker executor with image docker:latest ...
Applying docker.Client transport fix: amp;{false 0xc820306900 <nil> 0x39d9ee0 unix:///var/run/docker.sock 0xc820232780 0xc820340ba0 [1 18] [1 22] [1 18] 0xc820306930} host=unix:///var/run/docker.sock
Creating build volume... build=1 project=1
Looking for prebuilt image gitlab-runner-prebuilt-x86_64:c52ad4f ... build=1 project=1
Loading prebuilt image... build=1 project=1
Closed all idle connections for docker.Client: amp;{false 0xc8203072f0 <nil> 0x39d9ee0 unix:///var/run/docker.sock 0xc820232780 0xc820340ba0 [1 18] [1 22] [1 18] 0xc820306930}
ERROR: Preparation failed: write unix @->/var/run/docker.sock: write: broken pipe
Will be retried in 3s ...
Shell configuration: environment: []
dockercommand:
- sh
- -c
- "if [ -x /usr/local/bin/bash ]; thenntexec /usr/local/bin/bash nelif [ -x /usr/bin/bash
]; thenntexec /usr/bin/bash nelif [ -x /bin/bash ]; thenntexec /bin/bash nelif
[ -x /usr/local/bin/sh ]; thenntexec /usr/local/bin/sh nelif [ -x /usr/bin/sh
]; thenntexec /usr/bin/sh nelif [ -x /bin/sh ]; thenntexec /bin/sh nelsentecho
shell not foundntexit 1nfinn"
command: bash
arguments: []
passfile: false
extension: ""
build=1 project=1
Using Docker executor with image docker:latest ...
Applying docker.Client transport fix: amp;{false 0xc8203072f0 <nil> 0x39d9ee0 unix:///var/run/docker.sock 0xc820232780 0xc820340ba0 [1 18] [1 22] [1 18] 0xc820306930} host=unix:///var/run/docker.sock
Creating build volume... build=1 project=1
Looking for prebuilt image gitlab-runner-prebuilt-x86_64:c52ad4f ... build=1 project=1
Loading prebuilt image... build=1 project=1
Closed all idle connections for docker.Client: amp;{false 0xc820307a10 <nil> 0x39d9ee0 unix:///var/run/docker.sock 0xc820232780 0xc820340ba0 [1 18] [1 22] [1 18] 0xc820306930}
ERROR: Preparation failed: write unix @->/var/run/docker.sock: write: broken pipe
Will be retried in 3s ...
ERROR: Build failed (system failure): write unix @->/var/run/docker.sock: write: broken pipe
FATAL: write unix @->/var/run/docker.sock: write: broken pipe
Но мой докер.привязка к носку, похоже, в порядке :
# echo -e "GET /containers/json HTTP/1.0rn" | nc -U /var/run/docker.sock
HTTP/1.0 200 OK
Content-Type: application/json
Server: Docker/1.10.3 (linux)
Date: Wed, 19 Oct 2016 10:22:58 GMT
[{json is ok}]
У кого-нибудь есть идея?
Комментарии:
1. Есть ли у бегуна разрешения на доступ к сокету?
2. Я так думаю, я попытался
# echo -e "GET /containers/json HTTP/1.0rn" | nc -U /var/run/docker.sock
из контейнера runner, и, похоже, все в порядке.
Ответ №1:
Это известная ошибка с последними версиями gitlab-ci-multi-runner (начиная с v1.5.0
).
Вы можете использовать версию 1.4.2
, пока ошибка не будет исправлена должным образом. Вот ваша docker run
команда, использующая последнюю рабочую версию:
$ docker run -d --name gitlab-runner --restart always
-v ~/docker/gitlab-runner/config:/etc/gitlab-runner
-v /var/run/docker.sock:/var/run/docker.sock
gitlab/gitlab-runner:v1.4.2
Проблема уже существует в репозитории Gitlab CI с несколькими исполнителями:https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/issues/1617
Редактировать: Пожалуйста, используйте v1.4.2
вместо v1.4.3
. v1.4.3
Ошибочно помечен в Docker Hub:
$ docker run --rm -it gitlab/gitlab-runner:v1.4.3 -v
Version: 1.5.2
Git revision: 76fdacd
Git branch: 1-5-stable
GO version: go1.6.3
Built: Wed, 24 Aug 2016 13:35:10 0000
OS/Arch: linux/amd64
Комментарии:
1. Большое вам спасибо! Ты мой бог!
Ответ №2:
этот вопрос довольно старый, и, хотя на исходный вопрос, возможно, был дан ответ и работа с предлагаемым обходным решением, в настоящее время он НЕ РАБОТАЕТ с версией 11.0.0 gitlab-runner. Я смог приступить к работе…
ОС: rancheros 1.4.0 консоль: alpine Docker: docker-17.12.1-ce amp;amp; docker-18.03.1-ce
Я установил runner как обычно, затем зарегистрировался. Обнаружен сбой … затем отредактирован файл toml и изменен privileged = false
на privileged = true
.
sudo vim /srv/gitlab-runner/config/config.toml
docker stop gitlab-runner
docker rm gitlab-runner
docker run -d --privileged --name gitlab-runner --restart always -v /srv/gitlab-runner/config:/etc/gitlab-runner -v /var/run/docker.sock:/var/run/docker.sock gitlab/gitlab-runner:latest