Делать недействительным кэш Docker только при обновлении Git-репо - PullRequest
2 голосов
/ 28 октября 2019

У меня есть докер 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

Я использую make-файл с целями для построения образа. Сначала я извлекаю предыдущее изображение из концентратора докеров:

docker pull $(REGISTRY)/$(DOCKER_IMAGE)

, а затем я использую это извлеченное изображение в качестве кэша для новой сборки:

docker build --cache-from $(DOCKER_IMAGE) -t $(DOCKER_IMAGE) 

После этого новое изображение помещается вДокер-хаб. Я строю изображения в среде CI (Gitlab). Если я проверяю логи, шаг ADD всегда делает недействительным кеш (и контрольная сумма изменяется), даже если в Git-репо не было никаких обновлений.

Я проверил вывод "https://api.github.com/repos/dwjbosman/micropython/git/refs/heads/master". Содержимоепохоже, не меняется.

Есть ли какое-то скрытое свойство (время может быть?), которое все еще изменяется?

...