2017-02-01 5 views
0

Я только что начал работать с Jenkinsfiles и Docker, так что извиняюсь, если это что-то очевидное.Jenkinsfile custom docker container "не удалось найти команду FROM"

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

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

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

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

Когда я запустить Дженкинс построить, журнал вывода показывает контейнер 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 

ответ

3

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

Из 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); 
} 

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

1

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