【问题标题】:Not able to use a Dockerfile when using Jenkins CloudBees Docker Custom Build Environment Plugin使用 Jenkins CloudBees Docker 自定义构建环境插件时无法使用 Dockerfile
【发布时间】:2015-08-09 18:32:51
【问题描述】:

我尝试按照此处CloudBees Docker Custom Build Environment Plugin 的指南使用“在 Docker 容器内构建”和“从 Dockerfile 构建”选项。

我已将 Dockerfile 放在工作区根目录 (/var/lib/jenkins/jobs/lumi/workspace) 下。然后,当触发构建时,我在下面收到错误。我认为它能够找到 Dockerfile,但由于某种原因它无法构建映像。

Build Docker image from ./Dockerfile ...
$ docker build --tag b916af9f0b3e48425cb54c323d1a3adb749a72a1 --file Dockerfile /var/lib/jenkins/jobs/lumi/workspace
The Dockerfile (Dockerfile) must be within the build context (/var/lib/jenkins/jobs/lumi/workspace)
FATAL: Failed to build docker image from project Dockerfile
java.lang.RuntimeException: Failed to build docker image from project Dockerfile
    at com.cloudbees.jenkins.plugins.docker_build_env.Docker.buildImage(Docker.java:116)
    at com.cloudbees.jenkins.plugins.docker_build_env.DockerfileImageSelector.prepareDockerImage(DockerfileImageSelector.java:47)
    at com.cloudbees.jenkins.plugins.docker_build_env.DockerBuildWrapper.setUp(DockerBuildWrapper.java:126)
    at hudson.model.Build$BuildExecution.doRun(Build.java:156)
    at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:537)
    at hudson.model.Run.execute(Run.java:1741)
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
    at hudson.model.ResourceController.execute(ResourceController.java:98)
    at hudson.model.Executor.run(Executor.java:381)
Finished: FAILURE

以下是Dockerfile内容:

FROM php:5.6.11-apache

提前致谢。

【问题讨论】:

    标签: jenkins docker jenkins-plugins dockerfile


    【解决方案1】:

    我想终于得到答案了!

    我刚刚遇到了和你现在一样的问题,实际上很傻。

    我假设您在项目配置页面中勾选了“在 Docker 容器中构建”。您还必须指定一个路径,以确保 Dockerfile 在存储库中。

    这就是重点。如果此路径内有 Dockerfile,“Dockerfile”旁边的写空间必须留空。我猜这个空间包括使用不在指定路径内的 Dockerfile。如果没有这个,Jenkins 会假设你的 Dockerfile 在你指定的空间内,它不会考虑任何其他位置。

    由于我是 StackOverflow 的新手,我还不能发布任何屏幕截图。但是如果可以的话,我会确保你拥有它,这样我就可以更容易地表达我的观点。

    我真诚地希望这会有所帮助。我在输出中出现了相同类型的错误消息,现在我可以毫无问题地构建我的 Docker 映像了。

    【讨论】:

      【解决方案2】:

      如果您当前位于包含 Dockerfile 的目录中,则以下内容应该有效:

      $ docker build --tag b916af9f0b3e48425cb54c323d1a3adb749a72a1 --file Dockerfile .
      

      相当于:

      $ docker build --tag b916af9f0b3e48425cb54c323d1a3adb749a72a1 .
      

      在这两种情况下,. 指定构建上下文 - 发送到 Docker 守护程序的目录和文件集。使用. 只需将其设置为当前目录。由于 Dockerfile 在当前目录中,它将被发送到守护进程。

      您的示例中的问题是它正在寻找位于/var/lib/jenkins/jobs/lumi/workspace/Dockerfile 的Dockerfile。据推测,Dockerfile 不存在,但在您的当前目录中。由于只有目录 /var/lib/jenkins/jobs/lumi/workspace 中的文件被发送到 Docker 守护程序,因此它没有您的 Dockerfile 可供构建。

      我意识到这听起来有点奇怪。在它更有意义之前,最简单的方法是从带有 Dockerfile 的目录运行构建以避免此类问题。

      (另外,不要将 Dockerfile 放在主目录或下载文件夹中,因为所有数据都会发送到守护进程,这会导致等待很长时间)。

      【讨论】:

        【解决方案3】:

        假设您在 Jenkins 从机上运行此设置。

        ${WORKSPACE} 将设置 docker 上下文。这应该可以解决您的路径问题。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-03-05
          • 1970-01-01
          • 2020-05-10
          • 1970-01-01
          相关资源
          最近更新 更多