您好,我正在学习如何使用与Docker集成的Jenkins,我不知道如何与他们沟通。
我在Docker容器中运行Jenkins,我想在管道中构建一个图像。所以我需要在Jenkins容器中执行一些docker命令。
所以这里的东西是docker来自哪里。我知道我们需要将docker宿主守护进程(socket)绑定到Jenkins容器,但是这个容器仍然需要二进制文件来执行Docker。
我已经看到了实现这一目标的一些方法,我很困惑应该怎样做。我见过:
另外,我不明白Jenkins的Docker插件能为我做些什么。
谢谢!
答案 0 :(得分:1)
Docker具有客户端服务器架构。服务器是docker deamon,客户端基本上是命令行界面,允许您从命令行执行docker ...
。
因此,当在Docker中运行Jenkins时,您将需要访问连接到deamon。通过将/var/run/docker.sock
绑定到容器中来实现此目的。
此时您需要与作为服务器的Deamon进行通信。您可以通过提供对docker二进制文件的访问来实现。这可以通过安装docker二进制文件或安装 Jenkins容器内的客户端二进制文件。
或者,您可以使用Docker Rest API与deamon进行通信,而无需在Jenkins容器中使用docker客户端二进制文件。例如,您可以build an image using the API。
另外我不明白Jenkins的Docker插件可以为我做什么
Docker plugin for Jenkins对您描述的用例没有用处。这个插件允许你使用Docker配置Jenkins从属。例如,您可以在由Jenkins自动配置的Docker容器中运行编译
答案 1 :(得分:1)
将Docker与Jenkins一起使用并非最佳做法。这也不是一个坏习惯。 Jenkins和Docker之间的关系并不是以拥有Docker好坏的方式确定的。
Jenkins是一个持续集成服务器,它是一种奇特的方式,可以根据预定义的规则,在不同时间构建内容服务"
如果您的最终结果是要分发的泊坞窗图像,您可以让Jenkins调用您的docker build
命令,收集输出,并报告make
命令的成功/失败。
如果你的最终结果不是泊坞窗图像,你可以让Jenkins调用你的非docker build命令,收集输出,并报告非docker build的成功/失败。
如何启动构建取决于您如何构建产品。 Makefile与ant
,Apache Ant mvn package
,Apache Maven docker build
,docker with docker run -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:6.2.2
docker run -p 5601:5601 -e ELASTICSEARCH_URL=http://localhost:9200 docker.elastic.co/kibana/kibana:6.2.2
等等一起发布。从Jenkin的角度来看,如果您提供一整套规则来启动构建,收集输出并报告成功或失败,那么这并不重要。
现在,对于Jenkins'的Docker插件。正如@yamenk所说,Jenkins使用构建从属来执行构建。该插件将在Docker容器中启动构建从属。在该容器内构建的东西可能是也可能不是泊坞窗图像。
最后,在Docker容器中运行Jenkins意味着您需要将Docker化的Jenkins绑定到外部世界,如@yamenk所示,或者您在启动构建时遇到问题。
答案 2 :(得分:0)
仅当jenkins映像“足够接近”时,才将docker二进制文件绑定到jenkins映像中-它必须包含所需的共享库!
因此,在ubuntu 18.04中演唱标准的jenkins / jenkins:2.150.1时,这并不奏效。 (看起来很好看,很苗条;)
因此,要求是构建或查找包含与主机docker服务兼容的docker客户端的docker映像。
许多人似乎都在其詹金斯映像中安装了docker ....