#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"]