动态指定docker基本映像,但保持后续缓存

时间:2019-05-03 10:01:13

标签: git docker continuous-integration dockerfile git-branch

我有一个为每个git分支运行的构建过程。它为每个git分支使用不同的名称创建单独的docker映像。

构建有两个阶段。首先,构建基本映像。然后,构建两个单独的发行映像,它们都依赖于基础映像。发行映像是两个单独的应用程序。

因为每个分支的基本映像名称都更改,所以我传入了基本映像名称,以便发布dockerfile知道要使用的基本映像:

ARG branchBaseImage

FROM "$branchBaseImage" AS release

# Some tasks dependent on base image
RUN R -e "install.packages('plumber')"
...

ENTRYPOINT ["R","--vanilla", "-f", "/app/run.R"]

麻烦在于,在后续版本中,由于ARG发生时,缓存都会失效,因此在发行映像版本中我没有任何缓存。

这很棘手,我曾考虑过尝试对依赖项进行排序,但是我的最终映像必须是基础映像,并在上面运行一些其他任务。

我想到的唯一可能性是,不要将基础映像作为参数传递,而是在调用docker build之前,在CI进程中创建一个由Shell任务修改过的占位符,以诱使Docker思考这是一条静态行,不会在后续版本中更改,因此它可以在其后重新使用缓存的层:

FROM ##branchBaseImagePlaceholder## AS release

# Some tasks dependent on base image
RUN R -e "install.packages('plumber')"
...

ENTRYPOINT ["R","--vanilla", "-f", "/app/run.R"]

但是我是Docker的新手,所以我觉得我可能缺少明显的东西。

0 个答案:

没有答案