由于以下原因,我个人会沿着每模块类型容器的路线走:
- 我喜欢让我的容器尽可能集中。他们应该做一件事并做好,例如构建 Java 应用程序,构建 Node 应用程序
- Docker 让构建容器镜像变得异常简单
- 停止和启动容器非常容易
我可能会在 Git 中为自己创建一个单独的项目,其结构如下:
- /slaves
- /slaves/java
- /slaves/java/Dockerfile
- /slaves/node
- /slaves/node/Dockerfile
...
我有一个 Dockerfile,它为给定的“模块类型”创建和构建从属的容器映像。我会通过拉取请求对这个项目进行更改,每次拉取请求合并到主服务器时,将生成的图像推送到 DockerHub 作为新版本,用作我的 Jenkins 从属服务器。
我将由在我的 Jenkins 实例中运行的另一个项目处理上述内容,该项目只是监视我的 Git 存储库。当对 Git 存储库进行更改时,它只是按顺序运行构建命令,然后将新图像推送到 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
然后,您可以在准备好后将您的 Jenkins 配置更新为从属设备的新映像。