Пользовательский док-контейнер Jenkinsfile "не может найти инструкцию FROM"

Я только начал работать с Jenkinsfiles и Docker, поэтому извиняюсь, если это что-то очевидно.

У меня есть репозиторий, содержащий Dockerfile и файл Jenkins.

Dockerfile просто расширяет базовый образ Ubuntu (ubuntu: trusty), добавляя несколько зависимостей и инструменты сборки.

В настоящее время Jenkinsfile создает для меня только контейнер Docker:

node('docker') {
stage "Prepare environment"
    checkout scm
    docker.build('build-image')
}

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

Successfully built 04ba77c72c74
[Pipeline] dockerFingerprintFrom
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
[Bitbucket] Notifying commit build result
[Bitbucket] Build result notified
ERROR: could not find FROM instruction in /home/emackenzie/jenkins/workspace/001_test-project_PR-1-ROWUV6YLERZKDQWCAGJK5MQHNKY7RJRHC2TH4DNOZSEKE6PZB74A/Dockerfile
Finished: FAILURE

Мне не удалось найти каких-либо указаний о том, почему я получаю эту ошибку из Интернета, поэтому любая помощь будет принята с благодарностью


Dockerfile:

FROM    ubuntu:trusty
MAINTAINER Ed Mackenzie

# setup apt repos
RUN echo "deb http://archive.ubuntu.com/ubuntu/ trusty multiverse" >> /etc/apt/sources.list \
&& echo "deb-src http://archive.ubuntu.com/ubuntu/ trusty multiverse" >> /etc/apt/sources.list \
&& apt-get update

# python
RUN apt-get install -y python python-dev python-openssl

2 ответа

Решение

Это потому что твой FROM В строке используется табуляция для пробелов вместо пробелов. Это ошибка в подключаемом модуле документооборота Jenkins CI Docker, которая предполагает, что строка начинается с FROM сопровождается пробелом.

Из источника https://github.com/jenkinsci/docker-workflow-plugin на Github:

String fromImage = null;

// ... other stuff

if (line.startsWith("FROM ")) {
    fromImage = line.substring(5);
    break;
}

// ... other stuff ...

if (fromImage == null) {
    throw new AbortException("could not find FROM instruction in " + dockerfile);
}

Если вы используете пробелы вместо вкладок, это должно работать нормально.

Я просто столкнулся с той же проблемой, и это было похожее решение. Проверьте, закодирован ли файл с помощью спецификации в начале файла (это можно сделать с помощью чего-то вроде Notepad++). Если это так, сохраните его без маркера, и плагин перестанет жаловаться.

Ошибка может быть устранена путем изменения оператора "from" на "FROM"

Другие вопросы по тегам