Автоматизируем генерацию gRPC стабов для Go
End1essRage 1 час назад Автоматизируем генерацию gRPC стабов для Go Средний 13 мин 2.7K Go * DevOps * Проектирование API * Туториал Из песочницы Настраиваем генерацию gRPC стабов для Go и подключаем как модульДержать...
Вот важная новость с фронта ИИ: End1essRage 1 час назад Автоматизируем генерацию gRPC стабов для Go Средний 13 мин 2. 7K Go * DevOps * Проектирование API * Туториал Из песочницы Настраиваем генерацию gRPC стабов для Go и подключаем как модульДержать proto-контракты в одном репозитории удобно, но подключать их целиком в каждый сервис — не очень. Разберём, как автоматически генерировать Go-стабы из proto-файлов, версионировать их как отдельные Go-модули и публиковать через GitLab CI/CD.
Бонусом — swagger-документация и GitLab Pages. Всё описанное рассчитано на приватный бесплатный GitLab. В self-hosted и платной версиях, а также для публичных репозиториев настройка будет значительно проще — там часть ограничений просто снимается.
Технические детали
Примечания перед стартомПодход требует настройки dev-окружения: стандартного доступа к репозиторию по SSH и нескольких переменных окружения на каждой машине разработчика:GOPRIVATE=gitlab. com/your-group GOPROXY=direct GONOSUMDB=gitlab. com/your-group Для сервисов, использующих стабы, придётся собирать vendor-папку — как при локальном запуске, так и в пайплайнах при линтинге, тестах и сборке.
Это обусловлено тем, что Go не умеет скачивать приватные модули из GitLab в обход прокси без дополнительной настройки аутентификации. Доступ в CI-окружении осуществляется через CI_JOB_TOKEN. Типовой before_script для сервисов-потребителей стабов выглядит так:default: image: golang:${GO_VERSION} cache: key: go-mod paths: - go/pkg/mod - .
cache/go-build before_script: - go version - git config --global url. " " - go env -w GOPRIVATE=gitlab. com/chichilaki - go env -w GONOSUMDB=gitlab.
Отраслевые последствия
com/chichilaki - go mod vendor Структура репозиториевСоздаём группы и репозитории:`group/proto` — proto-контракты, единственный репозиторий, который мы будем редактировать вручную. `group/proto-stubs` — группа для сгенерированных стабов, репозитории внутри создаём заранее пустыми. `group/proto-stubs/common`, `group/proto-stubs/user`, `group/proto-stubs/admin` и т.
— по одному репозиторию на каждый модуль. `group/service` — любой сервис, использующий стабы. Репозитории стабовДля каждого стаба создаётся отдельный репозиторий Go-модуля.
В моём случае есть контракт для общих сущностей (common) и контракты для сервисов: user, admin, runner. Настройка доступа для CI_JOB_TOKENПоскольку каждый сервис в своём пайплайне использует CI_JOB_TOKEN для обращения к репозиториям со стабами, нужно явно разрешить такой доступ. Для каждого репозитория со стабами открываем Settings -> CI/CD -> Job token permissions и указываем репозиторий с proto-контрактами и группу с сервисами, использующими стабы.
Событие, по словам экспертов, усилит конкуренцию в сфере ИИ.




