这让我很疯狂:我正在尝试使用脚本化的Jenkins管道从我的存储库的特定文件夹中的Dockerfile构建Docker镜像,但它没有获得正确的路径。
这是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/),这应该有效:
可以通过添加其他参数将其传递给docker build 到
build()
方法的第二个参数。传递参数时 这样,该字符串中的最后一个值必须是该字符串的路径 泊坞文件。此示例通过传递-f标志来覆盖默认的
Dockerfile
: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
。
答案 0 :(得分:1)
据说这个文件夹中没有名为py365的文件。你是对的,docker.build步骤没有使用路径来运行构建。
文档错过了您必须在dockerfile语句中包含该目录:
def customImage = docker.build("km3pipe:${env.BUILD_ID}",
"-f ${DOCKER_FILES_DIR}/${dockerfile} ${DOCKER_FILES_DIR}")