#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() {} , Зачем вам нужно использовать подключение к удаленному хосту, если ваша цель-загрузить репозиторий с любого узла и создать его ?