Как кэшировать зависимости при использовании git pull в Dockerfile - PullRequest
0 голосов
/ 01 мая 2019

Скажем, у нас есть это в образе докера:

RUN git clone <url>
RUN git pull
RUN npm install

нам нужно, чтобы git pull всегда запускался.Но если package.json не меняется, нам не нужно переустанавливать.

У меня два вопроса - как мы можем заставить git pull работать всегда?Я считаю, что мы можем кэшировать бюст, используя --build-arg

Однако, если git pull всегда запускается, то, согласно докеру, команда npm install будет действовать.

Мы могли бы сделать одну вещь:используйте некоторую пользовательскую логику для сравнения sha-суммы файлов package.json.

RUN git clone <url>
RUN git pull
ENV package_shasum $(sha1sum package.json)
RUN compare-shasums && npm install

Кто-нибудь знает, как это сделать с помощью Docker?Причина, по которой мы делаем git в Docker, а не за пределами контейнера и копируем файлы в контейнер, заключается в том, чтобы упростить работу с Jenkins.

1 Ответ

0 голосов
/ 07 мая 2019

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

COPY package.json .
RUN npm install
COPY . .

, и он будет запускаться npm install только в случае изменения файла package.json. Но если мы сделаем git pull в Dockerfile, то это будет немного по-другому, но мы можем сделать это:

RUN git clone git@github.com:ORESoftware/live-mutex.git
ADD https://raw.githubusercontent.com/ORESoftware/live-mutex/master/package.json package.json
RUN npm install
RUN git fetch origin/master
RUN git checkout master

и для битбакета, URL будет:

https://bitbucket.org/<account>/<repo-name>/raw/<commit-sha-or-HEAD>/<filename>
...