Каковы несколько советов, как заставить мой проект каждый раз компилироваться при новой проверке?

StackOverflow https://stackoverflow.com/questions/437633

Вопрос

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

Каковы несколько советов о том, как структурировать мои проекты, чтобы у них не возникало проблем с компиляцией при новом извлечении из системы управления версиями?

Я начал хранить папку "Ресурсы" в своих проектах, которые содержат все необходимые ссылки на dll в системе управления версиями.Кто-нибудь еще может внести какие-то предложения?

Это было полезно?

Решение

Предполагая, что вы работаете в среде Visual Studio, вот несколько вещей, которые вы могли бы счесть полезными, YMMV, конечно, и обратите внимание, что мы используем Subversion, но должен работать любой инструмент VCS...

  • Поместите все (или как можно больше) зависимостей под контроль версий и ссылайтесь на них в своих проектах.Для управления этим мы используем внешние компоненты Subversion.
  • Не контролируйте версии стандартных выходных каталогов (bin, obj), т.е.используйте svn: игнорировать
  • Аналогично, игнорируйте пользовательские элементы управления версиями (*.user, *.suo)
  • Также не используйте файлы конфигурации управления версиями (App | Web.config), вместо этого создайте App.default.config и в ваших проектах перед выполнением задачи скопируйте этот файл в App.config.Это позволяет вам проявить фантазию, используя регулярные выражения и токены для настройки компиляций для каждого разработчика или сервера сборки, а также позволяет удалять все существующие файлы App.config в сборках CI, чтобы каждый раз обеспечивать безупречную сборку.Это также позволяет разработчикам возиться с конфигурациями, не беспокоя всех остальных, пока они не будут готовы, т.е.обновите App.default.config.
  • Все остальное контролируется версиями :)
  • Если вам нужны двоичные файлы для управления версиями (вывод MSI, DLL и т.д.) В результате вашей компиляции, в вашем целевом проекте AfterBuild (wixproj и т.д.) Скопируйте выходные данные в другой каталог, который находится под управлением версий.Один из советов при использовании Subversion заключается в том, что вы можете добавить / зафиксировать в каталоге svn: externals, что позволяет вам передавать библиотеки и т.д. В проект, который ссылается на них.

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

Другие советы

Найдите старый компьютер, который не используется, и настройте его на автоматическую "непрерывную сборку":

<Ол>
  • Подождите, пока кто-нибудь не внесет изменения
  • Обновить до последней версии всех файлов.
  • Удалите все файлы управления, не связанные с исходным кодом (недостаточно make clean - найдите и удалите мусор)
  • Построить.
  • Запустите юнит-тесты.
  • Один раз в день сохраняйте двоичные файлы после успешного запуска. Назовите это «официальной сборкой» на день.
  • Если сборка или тесты не пройдены, отправьте письмо с ошибкой. Включите список изменений, которые были подобраны в # 2.

    Если вы действительно не можете найти машину, сделайте это на виртуальной машине.

    Такие инструменты, как nmaven , могут помочь с проблемами зависимости (хотя вам, возможно, придется обратиться к java maven документы для информации ....)

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

    Кто-нибудь еще может внести какие-то предложения?

    1. Храните файлы, которые вам нужно собрать, в одном месте (один каталог и его подкаталоги)...большинство систем контроля версий называют это вашим "рабочим каталогом".
    2. В вашем программном обеспечении для управления версиями есть команда для перечисления различий между тем , что находится в вашем рабочем каталоге , и тем , что находится под управлением версий ...это "отличие" включает файлы, которые существуют в рабочем каталоге и которые не находятся под контролем версий
    3. Настройте свое программное обеспечение для контроля версий таким образом, чтобы исключить (из списка, отображаемого на шаге 2.) файлы, тип которых вы не хотите сохранять...например, вы можете захотеть сохранить только исходный код и исключить *.obj и так далее ...исключение этих типов файлов означает, что при выполнении шага 2 список различий не будет переполнен файлами, которые вы не собираетесь хранить
    4. Подумайте о том, чтобы иметь машину сборки, которая автоматически выполняет проверку и сборку (и которая отправляет вам электронное письмо, если когда-либо "сборка нарушена")

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

    Автоматизировать ваша сборка из рутированной среды или виртуальной машины, которая выглядит как свежая установка.Затем ваш скрипт сборки установит библиотеки DLL и так далее.Или ваш сценарий настройки перечислит недостающие зависимости (все из них, а не только первую).

    Сейчас час ночи, и мои слова звучат бессвязно, но две идеи являются центральными:

    • Создайте виртуальную машину или каталог chroot, который может имитировать пустую систему.В наши дни создать виртуальную машину, вероятно, проще всего.

    • Настройте свою систему сборки так, чтобы она автоматически выполняла проверку и сборку на вашей виртуальной машине - или же жаловалась на то, чего не хватает.

    На этом этапе вы можете сделать процесс частью автоматизированной ночной сборки, и вы будете счастливым туристом :-)

    Любые ресурсы / библиотеки DLL / настройки должны быть проверены в системе управления версиями вместе с исходным кодом.

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

    В моей компании мы используем Rational ClearCase. Все проверяется в системе управления версиями, за исключением сгенерированных файлов исходного кода (напримерфайлы .cpp и .h, сгенерированные компилятором MIDL).Из-за этого большинство сборок проходят довольно гладко.

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

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

    Вместо этого настройте простой сервер непрерывной интеграции - CruiseControl.Net является открытым исходным кодом; Командный город by JetBrains бесплатен - он проверяет работу сборок каждый раз, когда выполняется проверка.

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

    SCons - это еще один инструмент, который работает кроссплатформенно и помогает управлять вашими зависимостями. Как и в случае с GNU Make, у вас есть файл / скрипт scons. - и тот факт, что он использует Python, дает вам большую гибкость.

    http://www.scons.org/

    (мне нечего делать с SCons; мы просто используем это)

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top