Вы помещаете сборки в репозиторий исходного кода?

Я хотел бы получить некоторые отзывы об этой идее, так как я вижу плюсы и минусы каждого подхода. Как разработчик Java, речь идет о хранении файлов jar в репозитории кода, но он может легко распространяться на другие скомпилированные языки.

Плюсы:

  • Можно легко получить предыдущие дистрибутивы, не задумываясь о необходимости перекомпилировать устаревшие инструменты (потенциально более недоступные).

Минусы:

  • Может быстро "раздуть" репозиторий кода, в зависимости от частоты сборок.

Ответ 1

Мы архивируем релизы в структуру каталогов и помещаем соответствующие версии в исходный элемент управления. Это дает нам доступ к встроенным версиям и источнику, который их создал.

Это легко сделать, используя скрипты сборки для автоматизации тегов и архивирования релизов.

Ответ 2

Компромисс: хранить инструменты и исходный код в сборниках репозитория и тегов. Таким образом, вы всегда можете воссоздать любую сборку продукта.

И вы всегда можете иметь отдельный репозиторий для скомпилированных артефактов.

Ответ 3

Если вы можете создать достаточно хорошую систему сборки, тривиально воссоздать точную сборку только с помощью проверки кода, я не верю, что вам нужно хранить ваши сборки в репозитории.

Для большинства моих вещей я не храню определенные сборки своего кода, но я храню определенные версии библиотек, на которые опирается мой код. Несколько месяцев назад я приложил немало усилий, чтобы сделать тривиальным загружать в тег и набирать "ant", и все строит правильно, не полагаясь ни на что вне дерева. (исключая правильный javac и ant)

К сожалению, некоторые из наших кодовых баз не имеют такой хорошей системы сборки (т.е. требуют ручной настройки sdks и захвата различных внешних библиотек и переменных переменных), и было бы сложно воссоздать именно определенную версию сборки на основе репозитория (мы постоянно продвигаемся вперед и не поддерживаем старый код, поэтому рабочая станция разработчиков настроена достаточно близко, чтобы мы еще не были сожжены, чтобы вернуться к старой ветке до нашей текущей версии) и в этом случае мы сохраняем наши сборки релизов (для неизбежного жирного пальца "о нет, я был на неправильном сервере, делаю некоторые тесты" или что-то такое же коварное).

Ответ 4

Я храню сборки в папке на сервере и регулярно их резервируют. Но я помещаю ревизию, которая представляет эту сборку. В папке сборки я храню не только исполняемые файлы, двоичные файлы или страницы (наш случай - это ASP.Net), но и сценарии изменений, которые мы получаем из SQL Delta.

Теги называются с тем же идентификатором, что и поля, поэтому, если у вас есть сборка "System_2009-07-30-01", у вас будет тег с этим именем. Поэтому, если вам нужно что-то исправить, вы просто смотрите на имя сборки, смотрите тег, а затем просматриваете версию, необходимую для просмотра того, что может произойти.

Ответ 5

Я не думаю, что есть хорошая причина для версии фактической сборки. Пометьте исходную версию и сделайте так, чтобы только контролируемая группа имела доступ к изменению тегов. У тега сборки никогда не должно быть проверок, чтобы было возможно тривиально воссоздать сборку.

Ответ 6

Мы собираемся помечать репозиторий для любой сборки, чтобы мы могли получить фактический источник для любого номера сборки, а затем мы зацикливаем и загружаем фактические опубликованные файлы сборки, которые фактически развернуты, - просто чтобы убедиться, что нет скрытых настроек последней минуты и т.д. во время развертывания, которые не отражены в самой сундук.

Ответ 7

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

Одна из причин заключается в том, что он защищает вас от любых изменений вне вашей среды сборки, например, от Windows или визуального обновления студии. Возможно, вы не сможете воспроизвести бит-битовую сборку msi, если сам msi обновился!

Ответ 8

Я думаю, что уместно хранить вывод сборки в системе управления версиями. И для тестирования некоторой конкретной версии сборки, так и для облегчения определенных задач разработки.

Однако вы должны убедиться, что вы также сохраните все в репозитории, которые понадобятся для воссоздания этой точной сборки, если это необходимо. Чтобы облегчить это, вы должны использовать тегирование/маркировку. Возможно, вам придется протестировать исправление ошибок с различными версиями различных компонентов, и в зависимости от сложности вашей общей системы вы можете попробовать разные комбинации.

Ответ 9

Иногда. В большинстве случаев ответ отрицательный, но есть еще сценарии, где, если это имеет смысл, сделайте это.

В стороне, я удивлен, что это все еще открыто. Эти вопросы типа обсуждения обычно проголосовали за закрытие менее чем за 5 минут.

Ответ 10

Чтобы смягчить беспокойство о том, что старые инструменты сборки могут не работать в более новой среде, мы архивируем изображения сборки для основных выпусков. Это легко сделать для нас, потому что наши машины сборки виртуализированы. Он планирует B, если другие средства не работают.

Ответ 11

Я думаю, что источники, зависимости, двоичные файлы и инструменты сборки должны быть сопоставлены друг с другом... Это единственный способ отслеживать, что происходит с большими проектами, в которых окончательный выпуск поступает из многих исходных проектов...