Jenkins节点作为Docker容器

4
jenkins-node是一个Docker容器,用于运行任务。运行在Docker化的jenkins-node中的jenkins-job会检查svn/git项目,然后在由该任务启动的其他Docker容器中运行构建和测试。为此,jenkins-job通过"docker run -v ..."将从已检出的项目中的文件/目录挂载到构建容器中。这听起来像是在Docker中运行Docker,但根据http://jpetazzo.github.io/2015/09/03/do-not-use-docker-in-docker-for-ci/中的建议,Docker-in-Docker在CI中不好用。使用推荐方法(将主机的Docker套接字挂载到jenkins-node容器中)时,我遇到了这样的问题:构建容器中挂载的文件出现为空目录。我认为这是因为这些文件在主机中未知(它们是在jenkins-node容器中检出的)。在提供--privileged标志的情况下也无法帮助解决这个问题。
但是,“邪恶”的Docker-in-Docker方法对这种情况有效。我做错了什么还是Docker-in-Docker是解决问题的方法?
1个回答

3
采用“暴露docker插口”的方法后,所有卷路径都将相对于主机。因此,如果您需要访问jenkins-node容器中的某些内容,有两个选择:
- 确保检出目录是一个卷,并在所有其他docker容器的参数中使用--volumes-from jenkins-node。从您的问题中可以看出,测试套件创建的容器可能会从应用程序存储库进行配置,因此这可能不是一个好选择。 - 在启动jenkins-node时,将检出目录作为主机挂载的卷-v /git/checkouts:/path/in/jenkins-node/container。这样文件实际上将位于主机上(而不是jenkins-node容器中),您将能够以主机路径访问它们。
我还要说的是,您参考的文章更多的是一种警告。dind仍然经常使用,有时甚至是必要的。这并不是最糟糕的事情,只是要注意它不是银弹,并且具有它自己的一套问题/问题。

@denphin:你提到的第二个选项接近我所需要的。谢谢! - jmkg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接