每个模块types的jenkins-slave容器映像还是可以构build任何东西的单个集中映像?

我有多个项目,我需要build立作为相同的CIstream的一部分 – 一些是在java中,一些是nodejs,一些是c ++等。我们使用jenkins和奴隶应该作为docker集装箱运行。

我的问题是 – 我应该创build一个jenkins奴隶容器图像每个模块types,即一个专用的奴隶形象,这将能够build立java,一个专用的容器来build立nodejs与节点安装等或一个容器,可以build立任何东西 – jave,node等

如果我从vm的angular度来看,我很可能会使用相同的vm来构build任何东西 – 这意味着一个集中的构build奴隶。 但是我不喜欢这个依赖,或者如果明天我需要更新java版本并保留旧的版本,我可能会创build巨大的图像,但它们之间的差异很小。

WDYT?

我个人会按照每个模块types的容器的路线,因为以下几点:

  1. 我喜欢尽可能地集中我的容器。 他们应该做一件事,做好一些事情,例如构buildJava应用程序,构buildNode应用程序
  2. Docker使构buildContainer映像变得非常简单
  3. 停止和启动Container非常容易

我可能会在Git中创build一个独立的项目,其结构如下:

- /slaves - /slaves/java - /slaves/java/Dockerfile - /slaves/node - /slaves/node/Dockerfile ... 

我有一个Dockerfile,用于创build和构build给定“模块types”的从站的容器映像。 我会通过pull请求对这个项目进行更改,每当pull请求合并到master中时,将得到的图像推送到DockerHub作为我的Jenkins从服务器的新版本。

我将通过在我的Jenkins实例中运行的另一个项目来处理上述操作,该实例只监视我的Git存储库。 当对Git仓库进行更改时,只需按顺序运行构build命令,然后将新镜像推送到DockerHub:

 docker build -f slaves/java/Dockerfile -t my-company/java-slave:$BUILD_NUMBER -t my-company/java-slave:latest docker build -f slaves/node/Dockerfile -t my-company/node-slave:$BUILD_NUMBER -t my-company/node-slave:latest docker push my-company/java-slave:$BUILD_NUMBER docker push my-company/java-slave:latest docker push my-company/node-slave:$BUILD_NUMBER docker push my-company/node-slave:latest 

准备就绪后,您可以将Jenkinsconfiguration更新为奴隶的新映像。