Локальный бегун Gitlab не восстанавливает кэш, но общие бегуны восстанавливают

#docker #gitlab #gitlab-ci-runner #docker-for-windows

#docker #gitlab #gitlab-ci-runner #docker-для-Windows

Вопрос:

Я пытаюсь скомпилировать и протестировать проект на C и использовать ccache для ускорения времени сборки.

My .gitlab-ci.yml отлично разрешает кэширование с помощью общих бегунов Gitlab, но когда я запускаю тот же конвейер с моим бегуном, задание сообщает о создании кэша и успешном извлечении его при следующем запуске, но файлы не добавляются к путям кеширования.

 build:
  stage: build
  cache:
    key: "$CI_COMMIT_REF_SLUG"
    paths:
      - ccache/
  artifacts:
    paths:
      - build/app/wg-ui
      - build/lib/libproject-lib.so*
      - build/tests/tests
  script:
    - echo "Starting build"
    - ls
    - ls ccache
    - mkdir -p build amp;amp; cd build
    - qmake ../
    - make -j$(nproc) -Oline CXX="ccache ${CXX}"
  

Вот раздел бегунов моего config.toml

 [[runners]]
  name = "Laptop-Runner"
  url = "https://gitlab.com/"
  token = "{REDACTED}"
  executor = "docker"
  [runners.docker]
    tls_verify = false
    image = "alpine:latest"
    privileged = false
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/cache"]
    cache_dir = ""
    shm_size = 0
    pull_policy = "if-not-present"
  [runners.cache]
    [runners.cache.s3]
    [runners.cache.gcs]
  

Есть ли шаг настройки, который я пропустил? Нужно ли мне что-либо делать с моим config.toml?

Обновить

Вместо того, Docker for Windows чтобы использовать то, что я использовал раньше, я решил настроить виртуальную машину и запустить Docker и Gitlab-Runner оттуда.

Использование точно такого же .gitlab-ci.yml и config.toml кеширования сработало идеально, как и ожидалось; Поэтому я предполагаю, что проблема связана либо с моей конфигурацией Docker, либо с реализацией Gitlab Runner для Windows.

Ответ №1:

В вашем бегуне не настроен кэш, кроме кэша Docker, поскольку ваш [runners.cache] раздел пуст.

Из https://docs.gitlab.com/runner/configuration/advanced-configuration.html#the-runnersdocker-section :

Исполнитель Docker имеет 2 уровня кэширования: глобальный (как и любой другой исполнитель) и локальный кэш, основанный на томах Docker. Этот флаг конфигурации действует только на локальном, который отключает использование автоматически созданных (не сопоставленных с каталогом хоста) томов кэша. Другими словами, это только предотвращает создание контейнера, который содержит временные файлы сборок, он не отключает кэш, если бегун настроен в режиме распределенного кэша.

Обратитесь к https://docs.gitlab.com/runner/configuration/autoscale.html#distributed-runners-caching для режима распределенного кэша.

Комментарии:

1. [runners.cache] Раздел предназначен только для распределенных бегунов, я не хочу загружать свой кэш в экземпляр S3 или GCS. Я только хочу выполнить локальное кэширование, поскольку это просто для некоторых экспериментов. В абзаце, на который вы ссылались, говорится о локальных кэшах на основе томов Docker, которые по умолчанию уже определены как volumes = ["/cache"]