У нас є багато додатків та веб-служб (деякі суспільні продукти, деякі внутрішні та частина приватного «задніх місць»), які взаємозалежні один від одного. Кожен з цих компонентів має 4 середовища (кластери серверів / вузлів, що обслуговують певні цілі):
- Невиробнича
DEV
- інтегроване середовище розробки, де CI будує поштовх змін; корисно для інженерів для усунення помилок, які важко знайти, які не відтворюються локальноQA
- Ізольоване середовище забезпечення якості / тестуванняDEMO
- Стабільне середовище UAT для зацікавлених сторін бізнесу
- Виробництво
LIVE
- Наше живе / виробниче середовище
Просування коду йде: LOCAL
(машина розробника) => DEV
=> QA
=> DEMO
=> LIVE
.
Скажімо, у нас є додаток під назвою, myapp
яке підтримується RESTful веб-сервісом myws
, який називається , який сам підтримується БД mydb
.
В даний час у нас є те, що я б назвав " оркестрованим " просуванням серед цих залежностей: myapp-dev
бали, до myws-dev
яких користується mydb-dev
. Аналогічно myapp-qa
вказує на myws-qa
використання mydb-qa
. Те саме для DEMO
і LIVE
.
Проблема в цьому полягає в тому, що щоразу, коли я вношу зміни, скажімо myapp
, це вимагає від мене внесення змін myws
і mydb
до них. Але оскільки кожне DEV
середовище вказує на середовища його залежностей DEV
, це означає, що я повинен запланувати та розгорнути ці зміни все одночасно. Крім того, якщо одна збірка стає нестабільною / зламаною, вона часто збиває інші компоненти за течією; наприклад, якщо розробник щось ламає при зміні mydb-dev
, кластери myws-dev
і, myapp-dev
як правило, також стають нестабільними.
Щоб вирішити це питання, я складаю пропозицію щодо того, що я б назвав стратегією просування, що склалося : всі міжкомпонентні залежності відповідають цьому керівництву:
- Залежно видобутку нафти і газу залежить від
DEMO
середовища для їх вниз по течії залежностей, для всіх їх невиробничих середовищ (DEV
,QA
іDEMO
); і - Залежності вище за течією залежать від
LIVE
навколишнього середовища, залежно від їх виробничого середовища
Використовуючи цю конвенцію, можна myapp-dev
було б вказувати на те myws-demo
, що було б корисно mydb-demo
. Так myapp-qa
само вказували б myws-demo
і на mydb-demo
.
Перевагою тут є те, що я можу знайти стабілізацію збірки : набагато менше ймовірність того, що DEMO
середовище для певного компонента стане нестабільним, тому що код не може зробити це DEMO
без жорстких тестувань і на, DEV
і на QA
.
Єдиним недоліком, який я можу знайти у цьому методі, є те, що, якщо буде порушена DEMO
певна складова, всі невиробничі середовища для всіх залежностей від потоку раптово будуть порушені. Але я заперечую, що це трапляється вкрай рідко через тестування, проведене на DEV
та QA
.
Це мене проблема , що багато розробників (набагато розумніші , і досвідчені , ніж я сам) вирішили, і я не здивуюся , якщо ця проблема і її рішення вже мають назву на них (крім того , що я називаю спланованим / розрізненим). Тож я запитую: чи переваги стратегії промоції реклами переважають будь-які мінуси, і які мінуси я можу тут не помітити?