Как предотвратить сбой сборки при попытке доступа к локально кэшированному пакету nuget, который блокируется другим проектом в той же сборке?
Мы настроили CI на решение внутри компании.
В общей сложности сборка заняла около 13 минут, что показалось слишком длинным. Покопавшись, я узнал, что мы не проходили мимо /maxcpucount
переключиться на msbuild
команда, и поэтому каждый проект строился в последовательности, а не параллельно. Добавление этого переключателя сократило время сборки до 3 минут.
Тем не менее, мы начали периодически сталкиваться с ошибками в сборках с сообщением о том, что кэшированный пакет nuget уже используется другим процессом. Проект, который не удастся собрать, и заблокированный пакет nuget будет меняться каждый раз.
Это произошло потому, что мы создавали несколько проектов в рамках одного решения одновременно, и мы могли получить ситуацию, когда два параллельных проекта пытались одновременно получить доступ к одному и тому же локальному кэшированному пакету nuget.
Мы, конечно, не можем быть единственными людьми с этой проблемой, так как кажется, что это будет довольно распространенным явлением. У кого-нибудь есть опыт решения этой проблемы? Мы делаем что-то не так? Как мы можем предотвратить сбой этих сборок?
1 ответ
Так что я наконец понял, что было причиной этого, хотя я не могу понять, почему.
На нашем этапе Teamcity MSBuild наш рабочий каталог был настроен на %build.root%
, Удаление этого значения, так что по умолчанию использовался каталог проверки, по-видимому, остановило возникновение этой ошибки.