Какова практика деплоя Golang проектов?

Пока еще не сталкивался с этим и хочется узнать заранее, какие существуют практики деплоя приложений на Golang?
Смущает вопрос тем, что изначально в Golang заложена бинарная дистрибуция. Т.е. по идее подразумевается один готовый бинарник закидывать на хост и дело в шляпе.
Тут есть определенные минусы связанные с размерами самого бинарника, и как известно у Golang они приличные.

Для себя я более представляю деплой через контейнеры с автоматической сборкой бинарников уже на хосте, внутри контейнера. Чтоб он сам скачивал код с git репозитория, прогонял тесты и делал сборку.
Есть ли уже готовые инструменты для этого, чтоб не городить велосипеды?

Ну и хотелось бы почитать ответы людей уже имеющих опыт на практике.
Спасибо!
  • Вопрос задан
  • 3288 просмотров
Решения вопроса 3
@RidgeA
собирать бинарник на продакшене - идея так себе.
даже образ 1.9-alpine занимает 83 метра + будут зависимости в GOPATH

Я делал следующим образом
В GitLab CI создавалась задача на тесты проекта, сборку его в бинарник и создания docker образа FROM: SCRATCH, где находится ТОЛЬКО этот бинарник.
На входе я получал образ размером с бинарник - без зависимостей в GOPATH и среды сборки - около 15 мб.

Есть ньюансы для сборки такого бинарника, но в большинстве случаев ИМХО они не существенны.
+ недостатком такого подхода является то, что просто так в контейнер не залезешь и не выполнишь какую-то bash команду, т.к. там ничего нет вообще, кроме бинарника.

вот статья. https://blog.codeship.com/building-minimal-docker-...
Ответ написан
Комментировать
chupasaurus
@chupasaurus
Сею рефлекторное, злое, временное
У вас CI отклеился, хотя тесты и сборки гонять надо там.
Фокус с Golang в том, что кроме докер-образа с Alpine Linux + ваш бинарник больше ничего не надо, а размер такой пары гораздо меньше, чем полновесное окружение.
Ответ написан
@Symphel
Немного смутило ваше видение.
1. Не иметь собранного биинарника плохо: если вдруг нарушен доступ к репозиторию с исходным кодом, вы не можете деплоить стенды
2. Тесты надо прогонять до того, как изменения попадают в релизный бранч
3. Независимо от способа доставки данных, для сборки вам нужны все исходники проекта и стандартной библиотеки, их размер по очевидным причинам больше бинарника
4. Вам придется тянуть зависимости еще и для тестов
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы