带有Dockerfile的Jenkinsfile在特定文件夹中

时间:2018-05-29 07:22:35

标签: docker jenkins dockerfile jenkins-pipeline

这让我很疯狂:我正在尝试使用脚本化的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

1 个答案:

答案 0 :(得分:1)

据说这个文件夹中没有名为py365的文件。你是对的,docker.build步骤没有使用路径来运行构建。

文档错过了您必须在dockerfile语句中包含该目录:

def customImage = docker.build("km3pipe:${env.BUILD_ID}",
                               "-f ${DOCKER_FILES_DIR}/${dockerfile} ${DOCKER_FILES_DIR}")