Пользовательский док-контейнер 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"