Смоук-тестування інфраструктури: автоматизація перевірок після провізіонування

Після випуску середовище мовчить до першої скарги, а збої спливають уже в користувачів. Ми налаштовуємо смоук-перевірки інфраструктури під ключ: набори перевірок, автоматизацію та регламенти випуску. Аварійних випусків стає менше, а команда витрачає на розбір менше часу.
Часті запитання

Smoke testing infra: що ламається відразу після розгортання

Розгортання завершується з кодом нуль, а через десять хвилин частина сервісів не відповідає — сценарій знайомий.

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

За цим стоять три повторювані причини. Неповне середовище — частина секретів, сертифікатів і параметрів підключення залишилася від попереднього середовища або не перевизначилася.

Обірвані зв'язки — сервіс піднявся, але не бачить базу, брокер або кеш, бо група безпеки чи DNS-запис не оновилися. Не видані права — роль створена, а політика доступу до сховища чи реєстру образів до неї не прив'язана.

Окрема категорія — перевірка конфігурації, яка ніде не запускається як самостійний крок.

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

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

Smoke testing infra закриває саме цей розрив. Короткий набір перевірок після розгортання за хвилини відділяє «викотили» від «працює»: доступність вузлів, зв'язність між сервісами, права на операції, цілісність конфігурації.

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

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

Smoke testing середовища: що дає автоматизація перевірок

Смоук-перевірки середовища — короткий набір перевірок відразу після провізіонінгу: доступність вузлів, розпізнавання імен, відгук балансувальника, запис у сховище, проходження трафіку від зовнішньої адреси до застосунку. Набір іде хвилини й ловить поломку до того, як у середовище потрапить перший користувач.

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

Більша частина аварійних відкатів — не про поганий код, а про неготове середовище: незастосована міграція схеми, відсутній секрет, незакрите правило мережі. Смоук-набір перевіряє саме ці інваріанти й переводить відкат із «помітили на робочому контурі» в «упало на перевірці». Частка аварійних відкатів падає тому, що частина змін не доходить до випуску.

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

Коли інфраструктура описана декларативно в Terraform, середовище відтворюється повторним застосуванням опису, а не ручним складанням з пам'яті — тривалість простою перестає залежати від того, хто чергує.

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

Варіанти перевірок: ручний чек-ліст, скрипти, безперервний контроль

Перевірка після розгортання відповідає на одне питання: середовище працює в тому вигляді, у якому його віддали. Варіанти відрізняються не глибиною, а тим, хто запускає перевірку, коли вона спрацьовує і скільки зусиль потребує на підтримку. Порівнюємо їх без нав'язування одного підходу.

Варіант Коли підходить Обмеження Трудомісткість
Ручний чек-ліст Нові типи середовищ і перевірки, де потрібне судження: права доступу, поведінка зовнішніх систем Кроки пропускають у поспіху, результат не відтворюється, історія не зберігається Низька на старті, зростає з кількістю середовищ
Скрипти перевірок Регулярні розгортання однотипних стендів, повторюване ядро перевірок Ламаються при зміні середовища, покривають лише заздалегідь описані сценарії Середня, потрібен власник
Безперервний контроль Довгоживучі середовища, де важливо помітити деградацію між релізами Підтверджує стан, але не коректність нового релізу; потрібні пороги й канал оповіщень Зростає з кількістю метрик

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

Головне обмеження — застарівання: перевірки, прив'язані до конкретної топології, перестають бути правильними після першої ж зміни середовища, тому їхня ревізія входить у регламент.

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

Етапи впровадження: від аудиту середовища до передачі регламентів

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

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

  1. Аудит середовища — інвентаризація сервісів, зв'язків між ними, портів і зовнішніх інтеграцій. На виході карта того, що має сенс перевіряти, і перелік відмов, які вже траплялися.
  2. Схема перевірок — сценарії ділимо на швидкі та глибокі: зв'язність, доступність сервісів, читання й запис у сховища, міграції, відновлення після перезапуску вузла. Для кожного фіксуємо критерій «пройдено».
  3. Налаштування перевірок — переносимо схему в наявну автоматизацію і прив'язуємо до подій провізіонінгу. Перевірки не замінюють моніторинг: вони відповідають на питання, чи можна передавати середовище далі.
  4. Прогін на стенді-двійнику — розгортаємо копію бойової топології, вимірюємо повний час прогону й поведінку при падінні вузла. Тут же добираємо граничний час очікування відповіді та кількість повторів.
  5. Відпрацювання хибних спрацювань — відділяємо деградацію від шуму: несталі сервіси, гонки при старті, тимчасова недоступність зовнішніх залежностей. Орієнтир — нуль червоних прогонів на здоровому середовищі.
  6. Передача регламентів — описуємо дії при падінні перевірки, власника кожного сценарію і порядок розширення набору при додаванні нових сервісів.

Набори перевірок, схеми середовищ і регламенти випуску

Перевірки зберігаються не в листуванні, а в репозиторії поруч з описом інфраструктури. Набори запускаються відразу після провізіонінгу: вручну при розборі збою і автоматично в конвеєрі випуску — як обов'язковий шлюз перед передачею стенду командам розробки.

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

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

  • Набори перевірок базового рівня: доступність вузлів, розпізнавання імен, відгук балансувальника, готовність сховища.
  • Перевірки прикладного шару: відгук сервісів, черги повідомлень, права сервісних облікових записів, доступ до секретів.
  • Схеми середовищ: склад вузлів, мережі та підмережі, балансування, зв'язки між сервісами і зовнішніми системами.
  • Регламент випуску: кроки від провізіонінгу до передачі в експлуатацію, точки зупинки та критерії готовності стенду.
  • Правила доступу: розмежування ролей інженерів і сервісних записів, порядок видачі та відкликання прав, аудит дій.
  • Документація з перевірок: призначення набору, очікувані результати, розбір типових розбіжностей, порядок дій при збої.
  • Версіонування перевірок: історія змін, прив'язка до версії схеми середовища, позначки про застарілі набори.

Кейс: скоротили частку аварійних випусків після розгортання

Точка відліку

Розгортання в кластер Kubernetes завершувалося зеленим статусом конвеєра, але не означало, що сервіс справді працює: 18% випусків відкочували в перші години. Причини повторювалися — неприйнята міграція схеми, недоступна залежність, неправильний секрет у конфігурації.

Діагностика займала від 40 до 60 хвилин: інженер вручну звіряв події кластера, логи та змінні середовища, а в нічних випусках перевірки йшли за скороченим списком.

Що змінили і що отримали

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

Прогін займає 90–120 секунд, при падінні трафік залишається на попередньому релізі — відкат перестав бути ручною операцією. Хибні спрацювання відсікаємо очікуванням готовності пода протягом заданого часу, а не падінням на першому запиті.

Частка відкатів знизилася з 18% до 3%, час відновлення — з 50 хвилин до 7. Аварійні випуски поза регламентним вікном скоротилися майже втричі: причина збою видна у звіті прогону, а не відновлюється за логами постфактум.

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

Чим смоук-перевірки відрізняються від повного регресу середовища?

Смоук-перевірка відповідає на одне питання: чи можна пускати трафік у це середовище прямо зараз.

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

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

Він іде годинами, потребує підготовленого набору даних і стабільного середовища, а його результат — вердикт «функціональність не зламана», а не «середовище дихає».

Межа проходить за об'єктом перевірки: смоук дивиться на інфраструктуру та зв'язність компонентів, регрес — на прикладну логіку. Перший дає бінарну відповідь за хвилини, другий — детальний звіт за години.

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

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

Заміна регресу смоуком дає зворотний ефект: викладка проходить зеленою, а дефекти спливають у користувачів, бо перевірялася зв'язність, а не поведінка.

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

Розбір сумнівів: охоплення перевірок і нестабільні спрацювання

Охоплення перевірок задається не їх числом, а переліком шляхів відмови. Після провізіонінгу перевіряємо не лише «вузол піднявся», а й зв'язність між сегментами, відповідь балансувальника, права сервісного облікового запису, доступність сховища та коректність DNS-записів.

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

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

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

Чи вистачить охоплення, якщо частину контурів розгортають вручну?

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

Як відрізнити хибне спрацювання від справжньої аварії?

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

Що з підтримкою набору перевірок після передачі?

Віддаємо його разом із регламентом: які перевірки обов'язкові перед викаткою, як підключити новий контур, де дивитися історію прогонів. Перший час супроводжуємо самі — правимо пороги й додаємо сценарії під зміни інфраструктури, далі набір веде команда замовника.

Обговоримо вашу задачу і повернемося з планом перевірок

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

Якщо є логи викатки та конфігурації — додайте, цього достатньо, щоб побачити точки відмови без довгих розпитувань.

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

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

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

Наші компетенції:

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1542
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1394
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1369
  • Розробка логотипу компанії B2B Advance
    Розробка логотипу компанії B2B Advance
    816
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1142