0

我有多个项目需要构建为同一个 CI 流程的一部分——有些是 java,有些是 nodejs,有些是 c++ 等。我们使用 Jenkins,slave 应该作为 docker 容器运行。

我的问题是-我应该为每个模块类型创建一个 jenkins 从容器映像,即一个能够构建 java 的专用从映像,以及一个用于构建安装了节点等的 nodejs 的专用容器,还是一个可以构建任何东西的单个容器- jave、节点等

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

WDYT?

4

1 回答 1

1

由于以下原因,我个人会沿着每模块类型容器的路线走:

  1. 我喜欢让我的容器尽可能集中。他们应该做一件事并做好,例如构建 Java 应用程序,构建 Node 应用程序
  2. Docker 让构建容器镜像变得异常简单
  3. 停止和启动容器非常容易

我可能会在 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 配置更新为从属设备的新映像。

于 2017-01-18T11:29:22.800 回答