У нас є багато додатків та веб-служб (деякі суспільні продукти, деякі внутрішні та частина приватного «задніх місць»), які взаємозалежні один від одного. Кожен з цих компонентів має 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.
Це мене проблема , що багато розробників (набагато розумніші , і досвідчені , ніж я сам) вирішили, і я не здивуюся , якщо ця проблема і її рішення вже мають назву на них (крім того , що я називаю спланованим / розрізненим). Тож я запитую: чи переваги стратегії промоції реклами переважають будь-які мінуси, і які мінуси я можу тут не помітити?