В чем смысл "сборки сервера"? [закрытый]


Я не работал в очень больших организациях, и я никогда не работал в компании, которая имела "сервер сборки".

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

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

кто-нибудь, пожалуйста, просветите меня: какая цель сервера сборки?

18 96

18 ответов:

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

Джоэл Спольски по этому вопросу.

серверы сборки важны по нескольким причинам.

  • они изолируют окружающую среду локальную разработчик кода обезьяны говорит " он компилируется на мой машина", когда он не будет компилироваться на ваш. Это может означать, из-за отсутствия синхронизации регистрацию заезда или это может означать зависимые библиотеки отсутствует. Джар ад не так уж и плох .dll hell; в любом случае, использование сервера сборки-это дешевая страховка, что ваши сборки не будут загадочно проваливаться или упаковывать неправильно библиотеки по ошибке.

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

  • они координируют (распределенное) развитие. Стандартный случай, когда несколько разработчиков работают на одной и той же базе кода. Система контроля версий является сердцем такого рода распределенных разработка но в зависимости от инструмента, разработчики могут не взаимодействовать с кодом друг друга много. Вместо того чтобы заставлять разработчиков рисковать плохими сборками или чрезмерно агрессивно беспокоиться о слиянии кода, разработайте процесс сборки, в котором автоматизированная сборка может видеть соответствующий код и обрабатывать артефакты сборки предсказуемым образом. Таким образом, когда разработчик фиксирует что-то с проблемой, например, не проверяет новую зависимость файла, они могут быть быстро уведомлены. Делать это в поэтапной области давайте вы отметите код, который был построен, чтобы разработчики не вытаскивали код, который нарушил бы их локальную сборку. PVCS сделал это довольно хорошо, используя идею рекламных групп. Clearcase может сделать это тоже с помощью ярлыков, но потребует больше администрирования процесса, чем многие магазины заботятся о предоставлении.

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

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

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

У нас есть удивительное повышение стабильности, так как все публичные релизы начинаются с get from source control на пустую папку. Раньше было много "забавных проблем", которые"ушли, когда Джо дал мне новую DLL".

некоторые проекты настолько велики, что более мощные машины нужны, чтобы построить его в разумные сроки?

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

Это я просто не работал над проектами достаточно большие?

размер, безусловно, один фактор, но не единственный.

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

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

Я согласен с ответами до сих пор в отношении стабильности, прослеживаемости и воспроизводимости. (Много ити, да?). Работая только для крупных компаний (здравоохранение, финансы) со многими серверами сборки, я бы добавил, что это также касается безопасности. Вы когда-нибудь видели офисное помещение в кино? Если недовольный разработчик создает банковское приложение на своем локальном компьютере, и никто больше не смотрит на него или не тестирует его... БУМ. Супермен III.

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

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

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

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

добавить на то, что уже было сказано :

бывший коллега работал в команде Microsoft Office и сказал мне, что полная сборка иногда занимает 9 часов. Это было бы отстой, чтобы сделать это на код машины, не так ли?

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

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

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

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

вы правы, что разработчики могли бы строить на своих собственных машинах.

но это некоторые из вещей, которые наш сервер сборки покупает нам, и мы вряд ли сложные производители сборки:

  • проблемы с контролем версий (некоторые из них были упомянуты в предыдущих ответах)
  • эффективность. Разработчики не должны останавливаться, чтобы сделать сборки на месте. Они могут запустить его на сервере и перейти к следующей задаче. Если сборки большие, то это еще больше времени для разработчиков машина не занята. Для тех, кто делает непрерывную интеграцию и автоматизированное тестирование, еще лучше.
  • централизация. Наша машина сборки имеет скрипты, которые делают сборку, распространяют ее в средах UAT и даже на этапе производства. Хранение их в одном месте уменьшает хлопоты по их синхронизации.
  • безопасность. Мы не делаем здесь ничего особенного, но я уверен, что системный администратор может сделать так, что инструменты миграции производства могут быть доступны только на сервере сборки некоторые уполномоченные органы.

может быть, я единственный...

Я думаю, что все согласны с тем, что нужно

  • использовать файловый репозиторий
  • делать сборки из репозитория (и в чистой среде)
  • используйте сервер непрерывного тестирования (например, круиз-контроль), чтобы увидеть, если что-то сломано после вашего "исправления"

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

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

Итак, возможно, "сервер сборки" - это просто неправильное название, и на самом деле это"непрерывный тестовый сервер". В противном случае это звучит довольно бесполезно.

сервер сборки дает вам своего рода второе мнение о вашем коде. Когда вы его регистрируете, код проверяется. Если это работает, код имеет минимальное качество.

кроме того, помните, что низкоуровневые языки требуют гораздо больше времени для компиляции, чем языки высокого уровня. Легко подумать :" Ну смотрите, мой проект .Net компилируется за пару секунд! В чем дело?"Некоторое время назад мне пришлось возиться с некоторым кодом C, и я забыл, сколько времени требуется для компиляции.

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

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