Перейти к основному содержимому

1 запись с тегом "SourceCraft"

Посмотреть все теги

Как устроен build-кеш Go и как ускорить сборку в CI

· 23 мин. чтения

gobuildcache

Эфемерный CI-агент каждый раз стартует с пустым диском. Это удобно: окружение предсказуемое, мусор от прошлых сборок не накапливается, агенты легко масштабировать. Но есть неприятный побочный эффект: вместе с мусором пропадает и $GOCACHE.

На ноутбуке повторный go build ./... часто почти бесплатный, потому что Go переиспользует уже скомпилированные пакеты. На холодном CI-агенте локальный кеш пустой, поэтому Go снова компилирует весь проект и зависимости. Для больших Go-проектов это быстро превращается в минуты ожидания на каждом пайплайне.

В этой статье разберем, как устроен build-кеш Go, как работает GOCACHEPROG, и как я добавил в gobuildcache поддержку любого S3-совместимого хранилища, а не только AWS S3. В конце будут замеры на сборке Terraform-провайдера в SourceCraft с кешем в Yandex Object Storage.