Интеграция Jenkins & GitLab & Docker не удалась - PullRequest
0 голосов
/ 16 декабря 2018

Jenkins

В Jenkins я решил использовать функцию удаленного докера.Поэтому я установил docker.io на сервере Linux и использую этот конвейер.

node {
    stage('Example') {
        docker.withServer('tcp://docker.example.org:2375') {
            docker.image('stefanscherer/node-windows:10').inside {
                sh 'node --version'
            }
        }
    }
}

Но это не удается с сообщением об ошибке конфигурации тома.

java.io.IOException: Failed to run image 'stefanscherer/node-windows:10'. Error: docker: Error response from daemon: invalid volume specification: '/var/lib/jenkins/workspace/Docker Test:/var/lib/jenkins/workspace/Docker Test:rw,z'.
See 'docker run --help'.
    at org.jenkinsci.plugins.docker.workflow.client.DockerClient.run(DockerClient.java:133)

Возможно, проблема в том, чтоЯ пытаюсь совместить linux Jenkins с докером Windows?Но я читал, что это опция experimental, которая должна позволять использовать контейнеры Linux.

GitLab

GitLab-Runner, установленный через это руководство.https://docs.gitlab.com/runner/install/windows.html Затем я подключил его и выбрал docker в качестве исполнителя.

Когда я удаляю hosts из daemon.json, я получаю это сообщение об ошибке.

ERROR: Preparation failed: Error response from daemon: client version 1.18 is too old. Minimum supported API version is 1.24, please upgrade your client to a newer version (executor_docker.go:1161:0s)

Как получить версию, которая поддерживает более новый API?Я прочитал статью о том, что GitLab ждет LTS EOL (End-of-Life).Я думаю, что для CentOS или что-то еще.

Когда я настроил hosts в daemon.json, я получаю это сообщение об ошибке.

ERROR: Preparation failed: error during connect: Get http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.18/info: open //./pipe/docker_engine: The system cannot find the file specified. In the default daemon configuration on Windows, the docker client must be run elevated to connect. This error may also indicate that the docker daemon is not running. (executor_docker.go:1161:0s)

Это потому, что бегун не может найтиDocker, потому что Docker прослушивает только порт TCP.Я попытался добавить //./pipe/docker_engine к hosts из daemon.json, но это не сработало.Служба Docker немедленно аварийно завершает работу.

Docker

Windows Server 2016

daemon.json

{
    "hosts": ["tcp://0.0.0.0:2375"],
    "experimental": true
}

Цель

Моя цель состоит в том, чтобы создавать свои рабочие места из (linux) Jenkins и (linux) GitLab в (windows) Docker.

Проблема

Jenkins неработает вообще из-за некоторых настроек, может быть, или из-за того, что он пытается смонтировать пути Windows?

GitLab ожидает старый API, который не предлагает докер.

1 Ответ

0 голосов
/ 02 января 2019

Цель

Вы на правильном пути, распределение конвейера CI упрощает масштабирование, и контейнеры являются идеальным решением для этого.

Jenkins

В документации Docker Pipeline Jenkins объясняется:

Для того чтобы inside () работала, сервер Docker и агент Jenkins должны использоватьта же файловая система, чтобы можно было смонтировать рабочую область.

Так что попробуйте другую команду (например, withRun) и посмотрите, в любом случае, я пропускаю некоторые учетные данные здесь.Вы также можете настроить новый узел Jenkins для Docker, и там вы можете указать путь, по которому выполняются задания.

GitLab

Запланирована проблема с запуском GitLab в Windowsбыть включенным в выпуск 11.8 (февраль 2019 г.), как описано здесь .

Заключение

Я бы пошел на установку Linux, если выне могу дождаться новой версии GitLab, и я добавил бы новый узел Jenkins для конфигурации докера, как описано здесь .

...