在思考有没有必要为现有自动化构建系统提供基于 docker run 的构建方式

2020-05-15 10:20:42 +08:00
 whileFalse

我司的自动化构建系统现在使用 docker build 。项目根目录下放一个 Dockerfile 就行。

但 docker build 有一些限制,比如无法挂载 volume,maven 的包不太能完美缓存。每次构建都要下载一部分,构建时间 2 分钟。我测试过,如果 maven 包完美缓存,构建时间 1 分钟。

所以我在想是否要提供 docker run 的构建方式 。项目根目录下放一个 buildspec.yml ,在其中指定 runtime (也是 docker 镜像),代码挂载点,卷挂载点,构建指令等等。然后自动化系统会 run 这个 runtime 镜像,将代码复制到指定位置,将卷挂载至指定位置,并执行构建指令。构建指令会在 runtime container 中调用 docker build 生成一个镜像。

但是我觉得这么做不是很优雅,有以下几个问题:

  1. Dockerfile 仅依赖 Docker,因此容易调试; buildspec.yml 依赖自动化构建系统,出了问题得在自动化构建系统和配置文件中来回查找。
  2. 大大增加自动化系统本身的复杂度,以及 buildspec.yml 会很复杂,难以交给其他人维护
  3. 除了节省一些构建时间之外,看不到明显优势
  4. 日后和其他第三方自动化系统结合可能会有问题,毕竟所有第三方构建肯定支持 docker build,而想要在第三方系统里执行 docker run 外加挂载卷外加 run 的这个 container 内还要能执行 docker build 不一定能成。
700 次点击
所在节点    问与答
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/671905

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX