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ć:
- maszynę Zastosowanie Döcker aby utworzyć nowy serwer Döcker
- użyć oficjalnego Jenkins Docker obraz rozpędzają instancji Jenkins na tym serwerze
- Instalacja „Jeszcze Kolejne wtyczki Docker "i wtyczki" CloudBees Docker Pipeline ".
- 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?
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
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