2009-07-31 2 views
10

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

Плюсы:

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

Минусы:

  • может быстро "наворотов" репозиторий кода, в зависимости от частоты билдов.
+1

Да, определенно будет раздуваться ваш репозиторий. IMO, исходный репозиторий - это только для ** источника ** любого типа, но ** не ** для вывода сборок в конце. Но это только мое мнение –

ответ

20

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

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

+1

+1 - да, это то, что мы делаем. Полноценные сборки, которые прошли все тесты, и все архивировано нашим сервером сборки непрерывной интеграции на «Release Server» в share на диске. –

+1

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

+0

+1 Это имеет смысл. Контроллер источника должен «теоретически» иметь возможность воссоздать сборку, но если инструменты меняются, имеет смысл иметь параллельное расположение с реальными двоичными файлами. –

4

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

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

+1

Я думаю, что это хороший компромисс. Однако я также немного параноик относительно старых инструментов, которые больше не работают в будущем. –

+0

@Jin Kim: Предполагая, что вы также сохраняете релизы на FTP-сервере или эквивалент, это не должно вас беспокоить. –

0

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

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

+1

Я бы не согласился с этим - я бы предпочел знать, что я могу построить из любой абстракции точную копию того, что было отправлено. Поскольку в зависимости от вовлеченных людей, то .msi может не воспроизводиться на практике. Это может быть одноразовая сборка от какого-то разработчика, который забыл проверить его изменения и, следовательно, «не подлежит подтверждению». ВСЕГДА полагайтесь на свой процесс сборки, чтобы все было правильно, и если вы не можете, у вас есть что-то, что вам нужно исправить. –

+0

Ожидаете ли вы, что перестроенная MSI будет отличаться в любом случае? Я не имею в виду функционально, но на уровне бит-бит. –

0

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

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

+0

Я не вижу никакой пользы от засорения системы управления источником с выходом. –

+0

Это зависит от вашей среды и размера команды. В крупных проектах со сложными инструментами компиляция всего с нуля только потому, что вам нужна какая-то часть какого-то компонента, не всегда возможна. Сделайте свое собственное суждение. – VoidPointer

1

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

4

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

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

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

+0

+1. Все, что не может быть создано в процессе сборки из других входов, само должно рассматриваться как вход. Так что нормально проверять сторонние библиотеки или даже устаревшие, чья сборка не может быть автоматизирована. –

0

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

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

+1

Закрывающие нацисты должны находиться в другом часовом поясе и все еще спят. –

+1

Это не смутное обсуждение какого-либо субъективного вопроса, это проблема лучших практик. –

2

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

3

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

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

+0

+1 для подачи примера. –

0

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

-1

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

Смежные вопросы