Чи прийнятно розгортати веб-додаток для виробництва безпосередньо з SVN


11

Питання

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

Фон

На моєму робочому місці є культура тегів випуску в SVN, а потім їх розгортання безпосередньо на різних веб-серверах, використовуючи svn coабо svn switchвключаючи безпосередньо виробництво.

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

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

Редагувати:

Що я маю на увазі щодо створення та розгортання:

Наприклад, якщо розробник вимагає додавання налаштування web.config для певного середовища. Web.config, як правило, не зберігається у svn, тому ці файли оновлюються вручну без будь-якої форми автоматизованого сценарію збирання. Тож якщо вони загублені або OPS забули додати поле до web.config для випуску, то у вас виникнуть проблеми.

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

Поточний метод збірки та розгортання

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

Міграція баз даних для більшості проектів здійснюється через сценарії БД, або сценарії міграції (Migrator.NET), або пакети CMS.

CI, як правило, проводиться Team City на основі реєстрації, у нас є процес перегляду коду, що всі квитки робляться у відділеннях, а потім перевіряються на перевірку валідності та правильності / якості перед тим, як перевірити в багажник (працює добре).

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

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

Не зрозумійте мене неправильно, це працює, це працює добре. Однак я хочу спробувати надати автоматичну збірку та розгортання. Я використовував це для Rails і Capistrano, і для особистих проектів, використовуючи Cygwin, Nant та SSH.

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

Або НЕ існує реальних вагомих аргументів проти використання SVN спеціально для розгортання у виробництво?


Чи можете ви детальніше розказати про "без використання сценарію складання та розгортання або якоїсь форми або автоматизованого розгортання, втрачаючи налаштування середовища інтеграції"?
talonx

@talonx - Наприклад, якщо розробнику потрібні параметри web.config, додані для певного середовища. web.config, як правило, не зберігається у svn, тому ці файли оновлюються вручну без будь-якої форми автоматизованого сценарію збирання. Тож якщо вони загублені або OPS забули додати поле до web.config, то у вас виникнуть проблеми. Сценарій побудови, який каже, що використовує XMLPoke для автоматичного генерування web.config, відповідного для певного середовища, ідеально підходить тим, що у вас є надійний сценарій, який документує всі необхідні зміни для кожного вашого середовища.
Джастін Шилд

Дякую. Можливо, ви можете відредагувати своє запитання, щоб уточнити цей момент.
talonx

Чи потрібно лише перевірити джерела чи є якісь ручні дії після оформлення замовлення (складання, упаковка, конфігурація, ...)?
Девід

Відповіді:


7

З мого досвіду, є і переваги, і недоліки:

Плюси:

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

  • Простота: ви доставляєте швидко, хоча, як згадували інші, перехід на схему оновлення-скрипт може бути таким же простим.

Мінуси:

  • Ваша система може стати нестабільною під час svn upоновлення та оновлення БД. Для веб-сайту з високим трафіком це означає, що деякі користувачі в кращому випадку потраплять на повідомлення про помилки, зламані сторінки або порожні сторінки. Ну, це ми дуже часто бачимо на різних соціальних службах. Хоча хороший сервіс, однак, робить це «атомарним» у тому сенсі, що він переводить систему в режим обслуговування протягом тривалості оновлення. ( Ви порушили reddit! )

  • Конфлікти: вирішення раптових конфліктів на сервері виробництв - жахлива ідея: знову ж, сервіс стає нестабільним, поки ви його виправляєте.

  • Непов’язані файли на виробничому сервері, які можуть або не належать вам, хоча, звичайно, ви можете уникнути цього, перевіривши правильне піддерево в репо.

  • Безпека: хтось, хто отримав доступ до вашого виробничого сервера, законно чи ні, також отримує доступ до ваших репостів, можливо, і інших продуктів, а також, можливо, і з доступом до запису! Загальне відкриття вашого внутрішнього SVN-сервера для зовнішнього світу - погана ідея. Ваші джерельні сховища повинні знаходитись позаду брандмауера компанії.

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

Редагувати: для тих, хто все ще перебуває у схемі SVN, не забувайте про це у своєму конфігурації apache:

<DirectoryMatch .svn>
    Order deny,allow
    Deny from all
</DirectoryMatch>

1
+1: Відмінні аргументи. Можливо, я зможу продати його з точки зору безпеки та ризику виникнення компрометованого сховища. Безумовно, вагомий привід сприяти дискусії проти використання SVN для виробництва.
Джастін Шилд

2

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

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

Для ознайомлення дивіться, як Джоел сам розповідає про те, як процес збирання одним натисканням кнопки заощаджує вас у коротко- та середньостроковій перспективі.


0

Переконайтеся, що у вас є відповідні контрольні пункти перевірки на SVN. Наприклад, врахуйте це -

  • Особливості зареєстровані для випуску
  • Код розгортається в інсценування, QA виконує свою роботу
  • Виправлені помилки, черговий раунд тестування (проте це працює у вашій команді)
  • Дітто для попереднього прод
  • Розгортання на виробництво

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

Оновлення: у вас є проблема, що чекає, якщо ви не перевірите свої конфігураційні файли. Я не можу запропонувати жодних порад щодо цього, окрім "будь-ласка, і швидко!"


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

Як щодо того, щоб операції завжди брали конфігураційний файл з svn перед розгортанням?
талонкс

0

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

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

  • Бізнес зростає, тому ви плануєте розміщувати його на декількох серверах
  • У певному середовищі можуть бути помилки, і у вас немає місця для копіювання помилки. Немає простого способу налаштувати його без процесу tar-untar-забув_about_home_for_a_week.
  • Хтось, ймовірно, зламає збірку. Хто зламав збірку

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

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