2017-04-01 61 views
1

我已经设置了一个包含3个分支(master,dev和docker)的github存储库。我已经成功设置并链接dockerhub上的自动构建。每次在Github上进行推送时,都会在Dockerhub上以不同标记(最新的主设备,开发者的Beta版和码头工的Alpha版)构建映像。这工作正常。现在的问题...在Github-Dockerhub上自动构建的Docker工作流程

在Dockerfile上,有一个git clone命令来检索项目。问题是这总是指向主人。因此,如果我将某些东西推送到码头分支(例如使用alpha标签构建图像),那么该图像上的项目代码是主码而不是分支码头代码,这是此案例所需的分支码头代码。

如果我修改分支docker(它生成alpha标记的图像)的Dockerfile,我把git clone -b docker ...构建好,但在所有测试后,当我想合并一个从docker分支到dev分支的pull请求时例如,dev上需要另一个更新,以便将Dockerfile内部的git clone命令更改为指向正确的分支。同样的情况下,从dev到master的pull request对于这个项目来说更加困难,master分支是受保护的,我不能直接push到master ...所以在从dev到master的pull请求之后,我无法修复Dockerfile更改Dockerfile以将git clone更改为再次指向主设备。

有没有办法在自动化建设中拥有不同标签的分支,而不需要在从一个分支到另一个分支的请求之后进行任何更改?谢谢。

回答

2

使用自动构建时,会发生什么情况;

  • 泊坞集线器(或码头云,其中有一些更先进的功能)检查出来的git的承诺触发构建
  • 它建立您在自动生成配置搭建起Dockerfile

从上面;你应该而不是git clone你的Dockerfile 在所有的,因为你会做什么已经完成了自动构建。简单地做;

FROM some-base-image 

# Copy your project's source into the image 
COPY . /my-src 
RUN do-something-with-the-source 

泊坞云拥有先进的功能,它允许您在自动生成的不同阶段运行自定义脚本,使用build phase hooks (documentation)。这允许您(例如)通过在“构建图像”中构建项目,然后将生成的代码复制到本地目录并从中构建最终图像来制作“最小”图像。

编辑

上泊坞云自动构建选项比自动更多的功能上泊坞枢纽建设。例如,要构建的Dockerfile和构建上下文可以单独设置。这允许你在一个子目录中有一个Dockerfile,但是使用该子目录之外的文件作为构建上下文。要做到这一点,设置Dockerfile位置(例如)/docker/Dockerfile和buildcontext到/

enter image description here

+0

它并没有奏效。我从Dockerfile中移除了'git clone'并尝试了'COPY。/some/existing/path/inside/the/container',并且在推后,自动构建在命令之后失败,因为文件不在那里。我的意思是,COPY命令不会将我的项目复制到容器中。我也尝试过'COPY ../ some/existing/path/inside/the/container',因为我的Dockerfile位于项目的/ docker目录中......但它也不起作用。任何其他想法? – OscarAkaElvis

+0

我的项目在/ docker目录中有dockerfile文件......并使用COPY。/some/existing/path/inside/the/container'仅拷贝仅具有Dockerfile和README.md的/ docker文件夹的内容。我需要复制父目录及其所有目录(不关心/ docker是否被复制)。如何实现这一目标?正如我在其他评论中所说的。使用'COPY ../ some/existing/path/inside/the/container'生成这个错误'Build failed:构建上下文之外的禁止路径:..()' – OscarAkaElvis

+0

@OscarAkaElvis我添加了一些额外的信息和屏幕截图 – thaJeztah