Який сенс "побудувати сервер"? [зачинено]


101

Я не працював у дуже великих організаціях і ніколи не працював у компанії, яка мала "Build Server".

Яке їх призначення? Чому розробники не будують проект на своїх локальних машинах чи вони? Чи є такі проекти настільки великими, що потрібні більш потужні машини для їх побудови за розумну кількість часу?

Єдине місце, в якому я бачу, що сервер побудови є корисним - це безперервна інтеграція з сервером збірки, який постійно будує те, що призначено для сховища. Це я просто не працював над досить великими проектами?

Хтось, будь ласка, просвітліть мене: яка мета сервера складання?

Відповіді:


94

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

Жоель Спольський з цього приводу.


7
Things get especially hairy when developers are building against bleeding-edge libraries, not realizing it and then getting "NoClassDefFound" errors all over the place during testing and everyone else wondering what the hell went wrong. (This was problematic in my Java-based job until I set up Hudson and we moved QA builds to that)
MattC

1
Насправді це лише причина для побудови з чистої каси, а не для побудови з виділеного агента збирання на виділеному сервері збірки. Запуск автоматизованого сценарію збирання в чистому оформленні сховища на локальній машині розробників вже дає більшість переваг виділеного сервера збирання.
Кайзерлуді

Одним з головних переваг, IMHO, є те, що воно змушує вас використовувати систему збирання, яка запустить 100% автоматизовану систему та дуже спонукає вас мати нульові кнопки для натискання, щоб розпочати її роботу. Справа не лише в тому, що у вас є єдине джерело для випусків і тестових збірок, але і про те, щоб люди не накрутили вашу систему складання.
Чіткіший

48

Сервери побудови важливі з кількох причин.

  • Вони ізолюють навколишнє середовище Місцевий розробник Code Monkey каже: "Це компілюється на моїй машині", коли він не збирається на вашій. Це може означати, що реєстрація не синхронізована або може означати відсутність залежної бібліотеки. Чорт пекла не так вже й поганий, як .dll пекло; в будь-якому випадку, використання сервера збірки - це дешева страховка, що ваші збірки не будуть таємниче виходити з ладу або пакувати неправильні бібліотеки помилково.

  • Вони зосереджують завдання, пов’язані з побудовами. Сюди входить оновлення тегу збірки, створення будь-якої дистрибутивної упаковки, запуск автоматизованих тестів, створення та розповсюдження звітів про збірку. Автоматизація - це ключ.

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


12
+1 Отримати програмістів для документування змін у їхньому середовищі побудови - це як пастух котів. Вони просто не можуть згадати, на якому етапі вони оновлювали свою .Net або Boost lib, якщо вони розуміють, що вони це зробили взагалі. Наявність центрального сервера, що займається щоденною побудовою, вловлює їх у акті ввечері після того, як вони перевіряють код - і нічого такого не є мотивуючим, як сказано: "Ви порушили команду, що ви забули?"
kmarsh

28

Яке їх призначення?
Візьміть на себе завантаження машин розробників, забезпечте стабільне відтворювальне середовище для будівель.

Чому розробники не будують проект на своїх локальних машинах чи вони?
Тому що зі складним програмним забезпеченням, дивовижно багато речей може піти не так, коли просто "складати". проблеми, з якими я справді стикався:

  • неповні перевірки залежності різних типів, внаслідок чого файли бінарних файлів не оновлюються.
  • Публікуйте команди, які відмовляються безшумно, повідомлення про помилку в журналі проігнорується.
  • Побудувати, включаючи локальні джерела, які ще не взяли на себе контроль над джерелами (на щастя, ще немає ящиків повідомлень проклятих клієнтів ..).
  • Намагаючись уникнути вищезгаданої проблеми, створивши з іншої папки, деякі файли вибрані з неправильної папки.
  • Цільова папка, в якій об’єднані двійкові файли, містить додаткові застарілі файли розробника, які не повинні бути включені до випуску

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

Чи є такі проекти настільки великими, що потрібні більш потужні машини для їх побудови за розумну кількість часу?

Що "розумно"? Якщо я запускаю пакетну збірку на своїй локальній машині, я багато чого не можу зробити. Замість того, щоб платити розробникам за завершення збірок, платіть ІТ, щоб вже придбати справжню машину збірки.

Це я просто не працював над досить великими проектами?

Розмір, безумовно, є одним із факторів, але не єдиним.


8

Сервер збірки - це окрема концепція для сервера безперервної інтеграції. Сервер CI існує для створення ваших проектів при внесенні змін. На відміну від цього, існує сервер Build для побудови проекту (як правило, випуску проти тегованої версії) на чистому середовищі. Це гарантує, що жоден розробник не злому, твіки, неприйняті версії конфігурації / артефакту чи непідтверджений код не перетворює його у звільнений код.


чудова відповідь. також підтримайте ім'я.
Філіп Шифф

6

Сервер збирання використовується для побудови коду кожного, коли він зареєстрований. Ваш код може складатися локально, але, швидше за все, ви не будете постійно змінювати всі інші зміни.


5

Щоб додати те, що вже було сказано:

Колишній колега працював у команді Microsoft Office, і мені сказали, що складання інколи займало 9 годин. Це було б гарно зробити це на ВАШІй машині, чи не так?


4

Необхідно створити "чисте" середовище без артефактів попередніх версій (та змін конфігурації), щоб забезпечити роботу збірок і тестів і не залежати від артефактів. Ефективним способом ізоляції є створення окремого сервера збірки.


4

Я погоджуюся з відповідями на даний момент щодо стабільності, простежуваності та відтворюваності. (Багато 'іти, правда?). ТОЛЬКО колись працював у великих компаніях (охорона здоров’я, фінанси) з МНОГО серверами побудови, я додам, що мова йде також про безпеку. Коли-небудь бачили фільм Office Space? Якщо незадоволений розробник будує банківську програму на своїй локальній машині, і ніхто більше не дивиться на неї або не тестує її ... БУМ. Супермен III.


абсолютно @Greg! Всі, здається, пропустили цю частину. Зараз я працюю над процесом контролю змін на відповідність, який вимагає розгортання вторинного відділу до виробництва. Ну, якщо ви не хочете навчити ІТ як користуватися Visual Studio і розгортати yada yada yada ... це дає вам змогу зробити це швидкими клацаннями. Не знайте, як це вважається "марним", як дехто сказав.
gcoleman0828

3

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

Одне використання - це імітувати типову конфігурацію кінцевого користувача. Продукт може працювати на вашому комп’ютері зі всіма створеними вами інструментами розробки та бібліотеками, але, швидше за все, кінцевий користувач не буде мати таку ж конфігурацію, як ви. З цього питання інші розробники не матимуть такої ж настройки, як і ви. Якщо у вас є код з твердим кодом десь у вашому коді, він, ймовірно, буде працювати на вашій машині, але коли Dev El O'per намагатиметься створити той самий код, він не працюватиме.

Також їх можна використовувати для моніторингу того, хто останній продукт зламав, з яким оновленням і де продукт регресував. Щоразу, коли новий код зареєстрований, сервер збірки будує його, і якщо він не працює, зрозуміло, що щось не так, і користувач, який вчинив останнє, винен.


2

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

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


1

Ми використовуємо один, щоб ми знали, що у виробничих / тестових полях встановлені ті самі бібліотеки та версії цих бібліотек, що і на сервері збірки.


1

Йдеться про управління та тестування для нас. За допомогою сервера збирання ми завжди знаємо, що ми можемо створити нашу основну "магістральну" лінію з контролю версій. Ми можемо створити головну установку одним клацанням миші та опублікувати її в Інтернеті. Ми можемо виконувати всі наші тестові одиниці щоразу, коли код перевіряється, щоб переконатися, що він працює. Збираючи всі ці завдання в одну машину, це полегшує повторне її правильне повторення.


1

Ви праві, що розробники могли будувати на власних машинах.

Але це деякі речі, які купує нам наш сервер побудови, і ми навряд чи складні виробники:

  • Проблеми з контролем версій (деякі згадані у попередніх відповідях)
  • Ефективність. Devs не повинні зупинятися, щоб робити будівлі локально. Вони можуть розпочати це на сервері та перейти до наступного завдання. Якщо складання великі, то це ще більше часу, коли машина розробника не зайнята. Для тих, хто здійснює постійну інтеграцію та автоматизоване тестування, ще краще.
  • Централізація. У нашій машині побудови є сценарії, які створюють збірку, поширюють її в середовищі UAT і навіть на стадії виробництва. Утримуючи їх в одному місці, зменшуються проблеми з синхронізацією.
  • Безпека. Тут ми не робимо особливих особливостей, але я впевнений, що sysadmin може зробити так, що до інструментів міграції виробництва можна отримати доступ лише на сервері збирання певними уповноваженими особами.

1

Можливо, я єдиний ...

Я думаю, всі згодні з тим, що треба

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

Але ніхто не переймається автоматично вбудованими версіями. Коли в автоматичній збірці щось було зламано, але це вже не - кого це хвилює? Це незавершена робота. Хтось це виправив.

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

Тож, можливо, "сервер побудови" - це просто помилка, а насправді це "безперервний тестовий сервер". Інакше це звучить досить марно.


0

Сервер побудови отримує вам якусь другу думку про ваш код. Коли ви це зареєстрували, код перевіряється. Якщо він працює, код має мінімальну якість.


0

Крім того, пам’ятайте, що мови низького рівня займають набагато більше часу, ніж мови високого рівня. Неважко подумати: "Ну дивіться, мій проект .Net збирається за пару секунд! У чому полягає велика справа?" Тим часом назад мені довелося возитися з деяким кодом С, і я забув, скільки часу потрібно на компіляцію.


IMHO, мова йде не стільки про мови низького рівня, ні про високий рівень, а про розбиту / неіснуючу модульну систему C (тобто включають файли) проти мов з функціонуючою модульною системою.
Ельмар Зандер

0

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


0

Сервер збірки також дає вам основу для дескрипції, маючи можливість захоплювати всі частини, необхідні для відтворення збірки у випадку, якщо інші можуть мати права на право власності.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.