特定文件夹中包含Dockerfile的文件
这让我抓狂:我试图使用脚本化的Jenkins管道从存储库特定文件夹中的Docker文件构建Docker映像,但它没有得到正确的路径 这是特定文件夹中包含Dockerfile的文件,docker,jenkins,dockerfile,jenkins-pipeline,Docker,Jenkins,Dockerfile,Jenkins Pipeline,这让我抓狂:我试图使用脚本化的Jenkins管道从存储库特定文件夹中的Docker文件构建Docker映像,但它没有得到正确的路径 这是Jenkinsfile中的一行: def customImage = docker.build("km3pipe:${env.BUILD_ID}", "-f ${dockerfile} ${DOCKER_FILES_DIR}") 正如您在下面的Jenkinslog中所看到的,变量已正确解析(我还仔细
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
根据文档(),这应该是可行的:
通过添加其他参数,可以将它们传递给docker build
到build()
方法的第二个参数。在传递参数时
这样,该字符串中的最后一个值必须是
docker文件
此示例通过传递-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\u ID}
来自Dockerfile
中的Dockerfile
可在/dockerfiles/Dockerfile.test找到
这表示此文件夹中没有名为py365的文件。您是对的docker.build步骤没有使用路径来运行生成
文档遗漏了您必须在dockerfile语句中包含目录的内容:
def customImage = docker.build("km3pipe:${env.BUILD_ID}",
"-f ${DOCKER_FILES_DIR}/${dockerfile} ${DOCKER_FILES_DIR}")
是的,正如我在上面写的。它似乎在工作区目录中查找该文件,正如您在日志中所看到的,而不是在工作区/dockerfiles
中,它应该在那里……很抱歉,这应该是一个注释。我已经试过了,你是对的,有一个bug,因为它没有使用那个目录来运行docker构建。我使用dir步骤实现了它,只是编辑了答案。非常感谢,这似乎是一个合理的解决方法。然而(我是一个groovy noob),有没有一种方法可以在dir
闭包之外定义customImage
?在我输入目录之前,像def customImage=''
?我就是这样做的,它工作正常。由于duck类型,不确定它是否好;)我在网上贴了一封你答案的参考信