Как устроен build-кеш Go и как ускорить сборку в CI
Эфемерный CI-агент каждый раз стартует с пустым диском. Это удобно: окружение предсказуемое, мусор от прошлых сборок не
накапливается, агенты легко масштабировать. Но есть неприятный побочный эффект: вместе с мусором пропадает и $GOCACHE.
На ноутбуке повторный go build ./... часто почти бесплатный, потому что Go переиспользует уже скомпилированные пакеты.
На холодном CI-агенте локальный кеш пустой, поэтому Go снова компилирует весь проект и зависимости. Для больших Go-проектов
это быстро превращается в минуты ожидания на каждом пайплайне.
В этой статье разберем, как устроен build-кеш Go, как работает GOCACHEPROG, и как я добавил в
gobuildcache поддержку любого S3-совместимого хранилища, а не только
AWS S3. В конце будут замеры на сборке Terraform-провайдера в SourceCraft с кешем в Yandex Object Storage.