Дженкинс создает контейнер Docker на удаленном хосте с помощью файла dockerfile

#docker #jenkins #dockerfile #jenkins-pipeline

Вопрос:

Я совсем новичок в Дженкинсе и провел целых 2 дня, не ломая голову (а также google и stackoverflow) над тем, как создать контейнер docker на удаленном хосте (с точки зрения хоста Дженкинса). Моя установка:

  • Докер работает на компьютере macOS (он же «удаленный хост»).
  • Дженкинс работает как контейнер docker на этой машине
  • Облако Bitbucket работает в Atlassian
  • PyCharm — это мой инструмент разработки, работающий на компьютере macOS

Пока все работает нормально. Теперь я хочу, чтобы Дженкинс создал контейнер docker (на «удаленном хосте»), содержащий мою демонстрационную версию python.

Я использую файл dockerfile в своем проекте:

 FROM python:3
WORKDIR /usr/src/app
COPY . .
CMD ["test.py"]
ENTRYPOINT ["python3"]
 

Я пытаюсь создать файл Дженкинса, я ожидаю сделать 2 вещи

  • Вытяните репо
  • Создайте образ docker с помощью файла docker на «удаленном хосте».

Докер устанавливается как плагин и настраивается. Докер устанавливается с помощью конфигурации Дженкинса. Удаленный хост Docker настроен в «облачной» настройке в Jenkins — подключение работает (с помощью socat, работающего как контейнер docker) Хост Docker настроен на IP-адрес удаленного хоста и порт 2376. Я использую проект конвейера Дженкинса.

Самая многообещающая угроза использования удаленных хостов, конечно, заключается в https://www.jenkins.io/doc/book/pipeline/docker/#using-a-remote-docker-server

Но с помощью docker.withServer(‘tcp://192.168.178.26:2376’) (в моем случае локально, без учетных данных, потому что они недоступны извне) мне вообще не повезло.

Наиболее распространенное сообщение об ошибке: hudson.remoting.Исключение ProxyException: groovy.lang.MissingMethodException: No signature of method: org.jenkinsci.plugins.docker.workflow.Docker.withServer() is applicable for argument types: (java.lang.String, java.lang.String) values: [tcp://192.168.178.26:2376]

Если я попытаюсь позволить Дженкинсу построить его внутри собственного контейнера с собственным докером, это скажет мне /var/jenkins_home/workspace/dockerbuild@tmp/durable-6e12255b/script.sh: 1: /var/jenkins_home/workspace/dockerbuild@tmp/durable-6e12255b/script.sh: docker: not found Странно, как я и думал, докер был установлен. Но я все равно хочу строить на удаленном хосте.

На мой взгляд, наиболее многообещающим файлом Дженкинса является следующий — но, честно говоря, в данный момент я полностью потерян и действительно нуждаюсь в некоторой помощи:

 node {
    checkout scm
    docker.withServer('tcp://192.168.178.26:2376')
    def customImage = docker.build("my-image:${env.BUILD_ID}")

    customImage.inside {
        sh 'make test'

    }
 

Я ценю любой намек и очень благодарен вам за помощь.
С уважением
Мухакл

Комментарии:

1. Добро пожаловать в SO. У вас установлен плагин docker? Кроме того, я не понимаю смысла создания строки docker.withServer() {} , Зачем вам нужно использовать подключение к удаленному хосту, если ваша цель-загрузить репозиторий с любого узла и создать его ?