Jenkinsfile с Dockerfile в определенной папке - PullRequest
0 голосов
/ 29 мая 2018

Это сводит меня с ума: я пытаюсь создать образ Docker из Dockerfile в определенной папке моего хранилища, используя сценарий Jenkins Pipeline, но он не получает правильный путь.

Этоэто строка в Jenkinsfile:

def customImage = docker.build("km3pipe:${env.BUILD_ID}",
                               "-f ${dockerfile} ${DOCKER_FILES_DIR}")

Как вы можете видеть в Jenkinslog ниже, переменные правильно разрешены (я также дважды проверил рабочее пространство, все в порядке), но, кажется, игнорируетвторой аргумент .dockerfiles:

[py365] + docker build -t km3pipe:13 -f py365 ./dockerfiles
[py365] unable to prepare context: unable to evaluate symlinks in Dockerfile path: 
        lstat /var/lib/jenkins/workspace/f-docker-image-names-for-ci-2DCL5RJ7AMH7K
        IB6OCBTD57EC5DUGYZTQE5EQ6KGOSPXMUOVJP6Q/py365: no such file or directory

В соответствии с документацией (https://jenkins.io/doc/book/pipeline/docker/), это должно работать:

Можно передать другие аргументы в сборку докерадобавив их ко второму аргументу метода * 1016. * При передаче аргументов таким образом, последним значением в этой строке должен быть путь к файлу Docker.

В этом примере переопределяется значение по умолчанию Dockerfileпередав флаг -f:

node {
    checkout scm
    def dockerfile = 'Dockerfile.test'
    def customImage = docker.build("my-image:${env.BUILD_ID}", "-f ${dockerfile} ./dockerfiles") 
}

Строит my-image:${env.BUILD_ID} из Dockerfile, найденного в ./dockerfiles/Dockerfile.test.

1 Ответ

0 голосов
/ 29 мая 2018

Говорится, что в этой папке нет файла с именем py365.Вы правы: шаг docker.build не использует путь для запуска сборки.

В документации пропущено, что вы должны включить каталог в оператор dockerfile:

def customImage = docker.build("km3pipe:${env.BUILD_ID}",
                               "-f ${DOCKER_FILES_DIR}/${dockerfile} ${DOCKER_FILES_DIR}")
...