仅当 Git 存储库更新时才使 Docker 缓存无效

dwj*_*man 5 git docker gitlab-ci dockerfile

我有一个 docker Dockerfile,我想在其中克隆 Git 存储库。如果 Git 存储库没有更新,我希望 Docker 使用它的缓存。如果存储库已更新,则构建 Docker 映像应使用 Git 存储库更新。

基于这个 stackoverflow 问题:

如何防止 Dockerfile 缓存 git clone

我已将以下内容添加到我的 Dockerfile 中:

#invalidate cache if micropython is updated
ADD https://api.github.com/repos/dwjbosman/micropython/git/refs/heads/master /root/micropython_version.json

RUN git clone --recurse-submodules https://github.com/dwjbosman/micropython.git /root/micropython && \
    cd /root/micropython && \
    git submodule update
Run Code Online (Sandbox Code Playgroud)

我使用带有目标的 makefile 来构建映像。首先,我从 docker hub 中提取上一个镜像:

docker pull $(REGISTRY)/$(DOCKER_IMAGE)
Run Code Online (Sandbox Code Playgroud)

然后我使用这个拉取的图像作为新构建的缓存:

docker build --cache-from $(DOCKER_IMAGE) -t $(DOCKER_IMAGE) 
Run Code Online (Sandbox Code Playgroud)

然后新镜像被推送到 Docker hub。我正在 CI 环境 (Gitlab) 中构建图像。如果我检查日志,即使 Git 存储库中没有进行任何更新,ADD 步骤也总是会使缓存无效(并且校验和会更改)。

我已经检查了“ https://api.github.com/repos/dwjbosman/micropython/git/refs/heads/master ”的输出。内容似乎没有变化。

是否有一些隐藏的属性(也许是时间?)仍然在变化?