Stan's blog

Docker Gitlab CI/CD

Ускоряем yarn в Docker в Gitlab Docker Runner и не только

11 января 2024
Kandinsky: Результат генерации по запросу "Ускоряем yarn в Docker в Gitlab Docker Runner и не только"

Docker, конечно, будет при сборке использовать кэш, если yarn.lock не поменялся.
Cached by docker
Но если yarn.lock поменяется, то сборка даже с пятью пакетами становится долгой. Оно и понятно, yarn должен сначала все скачать
Install

Однако, можно использовать Buildkit и передавать yarn кэш от сборки к сборки. Это работает даже в docker runner который собирает docker compose. Для этого надо включить Buildkit через переменные окружения COMPOSE_DOCKER_CLI_BUILD=1 DOCKER_BUILDKIT=1. В моем случая в файле настроек pipeline CI/CD
# .gitlab-ci.yml
  script:    
    - COMPOSE_DOCKER_CLI_BUILD=1 DOCKER_BUILDKIT=1 docker compose -f docker-compose.test_spec.yml build --pull
"Волшебная" строчка выглядит так
# Dockerfile
RUN --mount=type=cache,target=/root/.yarn YARN_CACHE_FOLDER=/root/.yarn yarn install
вместо
RUN yarn install
Это работает "из коробки" начиная с Docker 23.0 - Buildkit уже внутри.
Мой результат 9 секунд вместо 77 при добавлении @popper/core
Magic

Подробнее можно почитать тут