2016-07-26 5 views
5

Obecnie eksperymentuję z Dockerem w połączeniu z Jenkinsem, aby usprawnić przepływ pracy CI/CD dla nowego projektu. Robię to na Macu z zainstalowanym Dockerem 1.12.Nie mogę przekonać Jenkinsa Dockera do budowania obrazów w portach

To co mam zrobić:

  1. maszynę Zastosowanie Döcker aby utworzyć nowy serwer Döcker
  2. użyć oficjalnego Jenkins Docker obraz rozpędzają instancji Jenkins na tym serwerze
  3. Instalacja „Jeszcze Kolejne wtyczki Docker "i wtyczki" CloudBees Docker Pipeline ".
  4. Dodaj „Docker chmury”, korzystając z adresu IP serwera Docker powyżej a osobą trzecią Docker DinD obrazu tehranian/dind-jenkins-slave

Z tej konfiguracji Prowadzę bardzo proste zadanie rurociągu takiego :

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

Jenkins obraca instancję Docker zgodnie z oczekiwaniami i wykonuje zadanie. Tak więc podstawowa konfiguracja Dockera działa zgodnie z oczekiwaniami.

Ale polecenie Docker w obrębie zadania nie działa. Zaloguj wyjście wygląda mniej więcej tak:

[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 

Teraz kiedy zajrzeć do rozwiązań, jest on zwykle wspomnieć, że gniazdo Docker musi być dostarczone do pojemnika jako objętość, ale nie wydają się działać albo .

Ponieważ ogólne ustawienia wydają się działać, czy niewolnik nie musiałby po prostu robić tego samego, co wtyczka Jenkinsa, aby w pierwszej kolejności zakręcić Docker slave? To znaczy, użyj adresu URL serwera Docker, aby go kontrolować? Ponieważ zakładam, że jest to wyjątkowo powszechny przypadek użycia, musi istnieć obraz Docker dla niewolników Jenkins Docker, który może to zrobić po wyjęciu z pudełka, prawda? czego mi brakuje?

+0

Załóżmy, że zalecane jest zamontowanie gniazda dokowania, tak jak wspomniałeś, aby pojemnik dokowany przez Jenkins miał go w /var/run/docker.sock. Kroki w kontenerze Docker stworzonym przez Jenkinsa są uruchamiane przez niektórych użytkowników - czy ten użytkownik może uzyskać dostęp do zamontowanego gniazda Docker? Na przykład, czy użytkownik jest w grupie "docker"? – wujek

+0

Nie sądzę, że potrzebujesz części 'węzeł ('docker')', zgodnie z: https://go.cloudbees.com/docs/cloudbees-documentation/cje-user-guide/chapter-docker-workflow. html to jednak nie rozwiąże problemu. Mam ten sam problem. Naprawiłeś to? – Stretch

Odpowiedz

0

Może być konieczne ustawienie środowiska dokańczego w doku i użycie zawartości docker-machine env node w uruchomionym skoroszycie.

+0

To nie zadziała z powodu sytuacji z kurczaka i jajka: Polecenie nie zostanie uruchomione bez działającej instalacji Docker. – Lunikon