我刚刚开始与Jenkinsfiles和Docker合作,如果这很明显就道歉。
我有一个包含Dockerfile和Jenkins文件的repo。
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
答案 0 :(得分:3)
这是因为你的FROM
行使用了一个空格而不是空格的标签。这是Jenkins CI Docker工作流插件中的一个错误,它希望该行以FROM
开头,后跟一个空格。
来自Github上的jenkinsci/docker-workflow-plugin来源:
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 :(得分:3)
我刚遇到同样的问题,这是一个类似的解决方案。检查文件是否在文件开头用BOM进行编码(这可以使用Notepad ++之类的东西完成)。如果是这样,请在没有标记的情况下保存它,插件将停止抱怨。
答案 2 :(得分:1)
可以通过将“ from”语句更改为“ FROM”来解决错误