jenkins – 节点作为docker集装箱

jenkins节点是运行作业的docker集装箱。 在dockerized jenkins-node中运行的jenkins-job检查svn / git的项目,并在作业启动的其他docker-container中运行构build和testing。 在这个过程中,jenkins-work通过“docker run -v …”文件/目录从签出的项目挂载到构build容器中。 这听起来像泊坞窗docker,但根据http://jpetazzo.github.io/2015/09/03/do-not-use-docker-in-docker-for-ci/泊坞窗docker是不擅长词。 使用推荐的方法(将主机docker-socket挂载到jenkins-node容器中),我正面临着构build容器中的挂载文件显示为空的问题。 我认为这是因为这些文件在主机中是不知道的(它们在jenkins-node容器内签出)。 提供–privileged标志没有帮助。

然而,“邪恶的”docker泊位者方法在这种情况下正常工作。 我在做什么? 是错的,还是docker工在这里要走的路?

通过“公开docker socket”的方法,所有的卷path都将相对于主机。 所以如果你需要访问jenkins-node容器中的东西,你有两个select:

  • 确保checkout目录是一个卷,并使用--volumes-from jenkins-node中的--volumes-from jenkins-node作为所有其他docker容器的参数。 从你的问题,听起来像testing套件创build的容器将从应用程序回购configuration,所以这可能不是一个好的select。
  • 在启动jenkins-node时,将checkout目录设置为主机装入卷-v /git/checkouts:/path/in/jenkins-node/container 。 这样,文件实际上将在主机上(不在jenkins-node容器中)结束,并且您将能够访问它们作为主机path。

我也会说,你所引用的文章更多的是谨慎。 dind仍然做了很多,有时甚至是必要的。 这不是最糟糕的事情,只是要意识到,这不是一个银弹,并与它自己的一套问题/问题。