Локальный кеш Conan при использовании с Jenkins

Наши конвейеры Jenkins будут иметь разные параллельные задания, выполняющие conan install и conan export-pkg, которые обновляют локальный кеш.

В настоящее время у нас есть один локальный кеш для пользователя jenkins в /home/jenkins/conan. Несколько пользователей входят в Jenkins, и поэтому действия одного пользователя повлияют на других.

Каков предпочтительный способ использования Jenkins и Conan, когда речь идет о локальном кеше? Должно ли каждое задание Jenkins получить свой собственный локальный кеш, установив CONAN_USER_HOME=$WORKSAPCE/conan или что-то в этом роде?


person senorpr    schedule 09.06.2020    source источник
comment
если вы установите CONAN_USER_HOME=$WORKSAPCE/conan, ваш кеш будет удаляться каждый раз, когда ваше рабочее пространство удаляется, поэтому вы не получите никаких преимуществ от кеша. На мой взгляд, имеет смысл установить что-то вроде /home/jenkins/.conan/<JOB_NAME>   -  person ymochurad    schedule 09.06.2020


Ответы (1)


Кэш Conan не предназначен для параллелизма. Если одно задание создает и строит пакет, а в то же время другое задание пытается использовать этот пакет, могут возникать условия гонки, и задания могут неожиданно завершиться с ошибкой и с неопределенным поведением. Таким образом, одновременное использование не допускается, и это исключает совместное использование кеша для заданий общего назначения, если ваши шаблоны использования не строго контролируются.

В большинстве случаев предпочтительнее настроить чистый кеш для каждого задания с помощью переменной среды CONAN_USER_HOME.

Есть несколько вещей, которые можно сделать, чтобы ускорить сборку:

  • Наличие сервера, такого как Artifactory, рядом с машинами CI, с предварительно скомпилированными двоичными файлами для зависимостей.
  • Существует новый экспериментальный кэш загрузки, который является параллельным и может использоваться совместно. среди нескольких заданий CI. Это может иметь большие преимущества, особенно если сеть работает медленно.
person drodri    schedule 09.06.2020
comment
Глядя на кеш загрузки, если я понимаю, мне все равно придется использовать отдельный CONAN_USER_HOME для каждого задания. В документации сказано: Этот кеш является исключительно механизмом оптимизации. Он полностью отличается от кэша пакетов Conan (обычно это папка ‹userhome›/.conan). В нем также говорится: «Для процессов непрерывной интеграции рекомендуется иметь разные кэши пакетов Conan (CONAN_USER_HOME) для каждого задания. - person senorpr; 10.06.2020
comment
Да все верно. Кэш загрузки может быть разделен между разными заданиями, но для каждого из них требуется свой кеш пакетов Conan (разный CONAN_USER_HOME). - person jgsogo; 11.06.2020