Локальный бегун Gitlab не восстанавливает кеш, но разделяемые бегуны - PullRequest
0 голосов
/ 26 марта 2019

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

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

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 && 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, либо с реализацией Windows Gitlab Runner.

1 Ответ

0 голосов
/ 26 марта 2019

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

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

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

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

...