缓存编译Docker容器的层

时间:2018-02-04 21:17:40

标签: c++ docker build continuous-integration

我将一些C ++二进制文件的构建过程固定化。但并非每个构建都必然涉及对所有构建源代码的更改。

所以,我只想构建具有与之关联的新的独特源代码的二进制文件。先前构建的二进制文件应该只使用现有的文件系统层。

在我的dockerfile中如下。原样,这只会构建一次二进制文件,并且永远不会承认源代码已经更改。如何让Docker了解相关的源代码更改?

RUN pushd "gnome" && rm -Rf workers && mkdir -p workers && ./scripts/buildCaptureTeamcity.sh && popd
RUN pushd "gnome" && rm -Rf workers && mkdir -p workers && ./scripts/buildOswaldTeamcity.sh && popd
RUN pushd "gnome" && rm -Rf workers && mkdir -p workers && ./scripts/buildRecorderTeamcity.sh && popd
RUN pushd "gnome" && rm -Rf workers && mkdir -p workers && ./scripts/buildSamTeamcity.sh && popd
RUN pushd "gnome" && rm -Rf workers && mkdir -p workers && ./scripts/buildTransmitTeamcity.sh && popd

我模糊地认为我可以获取源代码目录的SHA,并以ARG的形式将其添加到每个命令中。然后,源代码的每个SHA都是唯一的,并获得自己的文件系统层,除非必要,否则不会重新编译。像这样

  docker build -t code/code:teamcity_$TEAMCITY_BUILD_ID --build-arg buildtime_variable=$(shasum -a256 gnome/oswald/src/*) .

#Dockerfile
ARG buildtime_variable
RUN _=${buildtime_variable} pushd "gnome" && rm -Rf workers && mkdir -p workers && ./scripts/buildOswaldTeamcity.sh && popd

这有意义吗?或者有更好的方法吗?

0 个答案:

没有答案