2016-07-26 4 views
5

В настоящее время я экспериментирую с Docker в сочетании с Jenkins, чтобы оптимизировать рабочий процесс CI/CD для нового проекта. Я делаю это на Mac с установленной Docker 1.12.Не удается получить Jenkins Docker slave для создания изображений докеров

Это то, что я делаю:

  1. Используйте Docker машины, чтобы создать новый сервер Docker
  2. использовать официальные Дженкинс Docker изображение, чтобы раскрутить экземпляр Jenkins на этом сервере
  3. Установки «Тем не менее, Еще один плагин Docker Plugin "и" CloudBees Docker Pipeline ".
  4. Добавить «Docker облако», используя IP-адрес сервера Докера выше и третьей стороны Docker DinD изображения tehranian/dind-Дженкинс-рабского

С помощью этой установки, я бег очень простой работы трубопровода, как это :

node('docker') { 
    docker.image('hseeberger/scala-sbt').inside { 
     stage 'Checkout' 
     echo 'We got here!' 
    } 
} 

Jenkins запускает экземпляр Docker, как ожидалось, и выполняет задание. Таким образом, базовая настройка Docker работает так, как ожидалось.

Но команда Docker в задании не работает. Вход вывод выглядит примерно так:

[Pipeline] node 
Still waiting to schedule task 
Docker-23ebf3d8dd4f is offline 
Running on Docker-23ebf3d8dd4f in /home/jenkins/workspace/docker-test 
[Pipeline] { 
[Pipeline] sh 
[docker-test] Running shell script 
+ docker inspect -f . hseeberger/scala-sbt 

Cannot connect to the Docker daemon. Is the docker daemon running on this host? 
[Pipeline] sh 
[docker-test] Running shell script 
+ docker pull hseeberger/scala-sbt 
Using default tag: latest 
Warning: failed to get default registry endpoint from daemon (Cannot connect to the Docker daemon. Is the docker daemon running on this host?). Using system default: https://index.docker.io/v1/ 
Cannot connect to the Docker daemon. Is the docker daemon running on this host? 
[Pipeline] } 
[Pipeline] // node 
[Pipeline] End of Pipeline 

Теперь, когда я просматриваю вокруг решений, обычно упоминается, что гнездо Docker должно быть предусмотрено в контейнер, как объем, но это не похоже на работу либо ,

Поскольку общая настройка, похоже, работает, разве раб просто не должен был делать то же самое, что и плагин Jenkins, чтобы в первую очередь развернуть рабочую станцию ​​Docker? То есть, используйте URL-адрес сервера Docker для его контроля? Поскольку я предполагаю, что это чрезвычайно распространенный случай использования, должно быть изображение Docker для подчиненных Jenkins Docker, которые могут сделать это из коробки, не так ли? Что мне не хватает?

+0

Предположим, что вы устанавливаете гнездо для док-станции, как вы упомянули, рекомендуется, чтобы контейнер Docker, развернутый Jenkins, имел его в /var/run/docker.sock. Шаги в контейнере Docker, созданные Jenkins, выполняются некоторыми пользователями - может ли этот пользователь получить доступ к установленному гнезду Docker? Например, пользователь в группе 'docker'? – wujek

+0

Я не думаю, что вам нужна часть 'node ('docker')' ', в соответствии с: https://go.cloudbees.com/docs/cloudbees-documentation/cje-user-guide/chapter-docker-workflow. html однако это не решит вашу проблему. У меня такая же проблема. Вы исправились? – Stretch

ответ

0

Возможно, вам понадобится установить docker env и использовать содержимое docker-machine env node в вашем текущем shellscript.

+0

Это не будет работать из-за ситуации с курицей и яйцом: команда не будет работать без установленной установки Docker. – Lunikon

Смежные вопросы