Кэширование CI / CD в Gitlab

#gitlab #gitlab-ci #gitlab-ci-runner

#gitlab #gitlab-ci #gitlab-ci-runner

Вопрос:

Я хотел бы попробовать кэширование в моем проекте Gitlab, следуя документации здесь — https://docs.gitlab.com/ee/ci/caching/#how-archiving-and-extracting-works . У меня есть бегун для конкретного проекта, и я использую docker executor, но я получаю сообщение об ошибке

 cat: vendor/hello.txt: No such file or directory
  

Как мне решить эту проблему? Я установил disable_cache = false в своей конфигурации runner, но это не помогло.
РЕДАКТИРОВАТЬ: использование частного экземпляра gitlab 12.3.

Ответ №1:

Я достиг этого, используя распределенное кэширование, которое я нашел простым. Прежде всего, вам нужно хранилище, совместимое с S3, или хранилище, совместимое с s3, например minio. Вы можете установить MinIo локально, где существует gitlab runner со следующими командами.

 docker run -it --restart always -p 9005:9000 
        -v /.minio:/root/.minio -v /export:/export 
        --name minio 
        minio/minio:latest server /export
  

Проверьте IP-адрес сервера:

 hostname --ip-address
  

Ваш сервер кэша будет доступен по адресу MY_CACHE_IP:9005

Создайте корзину, которая будет использоваться исполнителем:

 sudo mkdir /export/runner
  

runner — это имя корзины в этом случае. Если вы выберете другое ведро, оно будет другим. Все кэши будут храниться в каталоге /export .

Прочитайте доступ и секретный ключ MinIO и используйте его для настройки бегуна:

 sudo cat /export/.minio.sys/config/config.json | grep Key
  

Следующий шаг — настроить ваш runner на использование кэша. Для этого ниже приведен пример config.toml

 [[runners]]
  limit = 10
  executor = "docker machine"
  [runners.cache]
    Type = "s3"
    Path = "path/to/prefix"
    Shared = false
    [runners.cache.s3]
      ServerAddress = "s3.example.com"
      AccessKey = "access-key"
      SecretKey = "secret-key"
      BucketName = "runner"
      Insecure = false
  

Я надеюсь, что этот ответ поможет вам

Ссылка:

https://docs.gitlab.com/runner/install/registry_and_cache_servers.html

https://docs.gitlab.com/runner/configuration/autoscale.html#distributed-runners-caching

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

1. Но нужно ли это? В документации говорится: «Кэш: хранятся там, где установлен GitLab Runner, и загружаются в S3, если включен распределенный кэш». У меня не включен распределенный кэш, потому что я использую только один бегун. Я не могу сохранить их на том же сервере, на котором установлен gitlab runner,

Ответ №2:

Мне удалось решить проблему благодаря этому сообщению https://gitlab.com/gitlab-org/gitlab-runner/-/issues/336#note_263931046 . В основном добавлено

 variables:
GIT_CLEAN_FLAGS: none
  

и это сработало.
ответ @ Bilal определенно правильный, но я искал немного другое решение.