Как создать конвейер Jenkins, который создает образ Docker - PullRequest
0 голосов
/ 04 июля 2019

Я новичок в Docker и Jenkins, и я пытаюсь создать конвейер Jenkins, который создает образ Docker.Я застрял при попытке собрать и продолжать получать эту ошибку:

/var/jenkins_home/workspace/Docker-Pipeline@tmp/durable-a11b32f8/script.sh: строка 1: docker: команда не найдена

  1. Я установил Ubuntu на виртуальной машине.
  2. Установлен докер.
  3. Установлен Дженкинс / Дженкинс из Dockerhub.
  4. Я следовал этому руководству дляостальные: https://www.youtube.com/watch?v=z32yzy4TrKM&t=147s

Я делаю то же самое, что и он, но это не помогает.

Started by user admin
Obtained Jenkinsfile from git https://github.com/naorca/NodeApp.git
Running in Durability level: MAX_SURVIVABILITY
[Pipeline] Start o

f Pipeline
[Pipeline] node
Running on Jenkins in /var/jenkins_home/workspace/Docker-Pipeline
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Clone repository)
[Pipeline] checkout
No credentials specified
 > git rev-parse --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repository
 > git config remote.origin.url https://github.com/naorca/NodeApp.git # timeout=10
Fetching upstream changes from https://github.com/naorca/NodeApp.git
 > git --version # timeout=10
 > git fetch --tags --progress https://github.com/naorca/NodeApp.git +refs/heads/*:refs/remotes/origin/*
 > git rev-parse refs/remotes/origin/master^{commit} # timeout=10
 > git rev-parse refs/remotes/origin/origin/master^{commit} # timeout=10
Checking out Revision b74538f2f34b6c28306fcca8119e215b87124e5e (refs/remotes/origin/master)
 > git config core.sparsecheckout # timeout=10
 > git checkout -f b74538f2f34b6c28306fcca8119e215b87124e5e
Commit message: "Update Jenkinsfile"
 > git rev-list --no-walk b74538f2f34b6c28306fcca8119e215b87124e5e # timeout=10
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Build image)
[Pipeline] sh
+ docker build -t naorca/nodeapp .
/var/jenkins_home/workspace/Docker-Pipeline@tmp/durable-a11b32f8/script.sh: line 1: docker: command not found
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
ERROR: script returned exit code 127
Finished: FAILURE

1 Ответ

0 голосов
/ 05 июля 2019

TL; DR : в вашем агенте Jenkins должен быть Docker.

Следуя описанному выше процессу, я запустил Jenkins, используя последнее jenkins/jenkins изображение из Docker Hub . Просмотрев файловую систему контейнера, я подтвердил то, о чем спекулировал, в своем комментарии к вашему вопросу: Docker не установлен в контейнере Jenkins. Предполагая, что вы используете главный сервер Jenkins в качестве агента для конвейерной работы, у вас есть пара вариантов, которые приходят на ум:

  1. Расширьте существующий докер-контейнер - используя что-то вроде FROM jenkins/jenkins внутри нового файла докера - чтобы включить ваши зависимости.
  2. Свяжите существующий демон докера с хоста в среду выполнения контейнера Jenkins.

Хотя я неравнодушен к первому решению, я нашел реализацию второго решения на форумах Docker: « Использование docker в докеризованном контейнере Jenkins » Затем я попробовал это решение и могу подтвердить этот Docker присутствует для меня в контейнере Jenkins Master после запуска контейнера Jenkins с помощью следующей команды:

docker run -v /var/run/docker.sock:/var/run/docker.sock \
    -v $(which docker):$(which docker) \
    -p 8000:8080 \
    -p 50000:50000 \
    jenkins/jenkins

Я не уверен, но я мог бы предположить, что могут быть некоторые негативные последствия для безопасности хоста Jenkins Master из-за установки его собственного сокета Docker и исполняемого файла Docker в контейнер; однако, я бы оставил это на усмотрение кого-то более осведомленного о внутренностях Докера. В любом случае, я могу подтвердить, что приведенное выше решение работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...