DevOps-практики та CI/CD
1) Цілі та принципи
Швидко і безпечно: короткі цикли, маленькі партії змін, автоматичні перевірки.
Повторюваність: інфраструктура як код (IaC), середовище = код + політика.
Спостережуваність: метрики/трейси/логи з коробки, SLO як контракт.
Комплаєнс: аудит, контроль змін, регіональна ізоляція даних.
Золоте правило: «Спочатку якість, потім швидкість - інакше швидкість ніколи не з'явиться».
2) Розгалуження та оточення
Trunk-based + feature flags - базовий вибір.
Короткі фіче-гілки (≤ 2-5 днів), щоденні merge в trunk.
Прапори (server-side) для інкрементальної доставки і безпечних відкатів.
Git-оточення: 'dev'→'stage'→'prod'( + регіональні'prod-eu','prod-latam').
Промоушн артефактів: один зібраний образ просувається через середовища (immutable tag by digest).
Коли GitFlow: рідкісні релізи регуляторних збірок/SDK - тоді реліз-гілки + «hardening».
3) Піраміда якості і «червона лінія»
1. Статичний аналіз (SAST, лінтери, ліцензії).
2. Unit/Property-based тести (секунди).
3. Contract-tests (CDC) для API і подій (OpenAPI/AsyncAPI, Schema Registry).
4. Інтеграційні (Testcontainers, локальні брокери).
5. E2E критичних шляхів: реєстрація → KYC → депозит → запуск гри → виведення.
6. Навантажувальні/хаос-тести для платежів/гаманця/провайдерів ігор.
Якість не проходить → деплою блокується. Немає «ручних винятків» без change-record.
4) Ланцюжок поставки ПЗ (supply chain)
SBOM для кожного образу/пакета (CycloneDX/SPDX).
Підписи артефактів (cosign), політика «тільки підписані» в admission.
SCA/Dependabot: уразливості та ліцензії.
Provenance/SLSA: відтворювані збірки, закритий білд-агент, attestations.
Секрети: в менеджері (KMS/External Secrets), жодного секрету в репо/логах.
5) GitOps и IaC
Infra as Code: Terraform/Pulumi для хмари; Helm/Kustomize для k8s.
GitOps-контролер (ArgoCD/Flux): декларативні маніфести, PR-рев'ю, audit trail.
Вікна/заморозки: турнірні тижні/пікові годинники - авто-пауза прод-релізів.
Політики OPA/Kyverno: no `:latest', non-root, read-only FS, заборона hostPath.
6) Прогресивна доставка
Canary: 1→5→10→25→50→100% за метриками guardrail (p95 latency, 5xx, error budget burn).
Blue-Green: швидкий перемикач + план відкату.
Shadow/Mirroring: копіювання запитів без впливу на відповідь (для нових адаптерів PSP).
Feature flags: включення за сегментами (регіон/роль/партнер/канал) + kill-switch.
7) Міграції БД (expand-and-contract)
Крок 1: розширюємо схему (нові колонки/індекси) - сумісно зі старим кодом.
Крок 2: деплою коду, що пише в обидві версії/поля.
Крок 3: міграція даних фоновою джобою, метрики прогресу.
Крок 4: перемикання читання на нові поля.
Крок 5: видалення старого - окремий реліз.
Заборона блокуючих DDL в прайм-тайм; для високих таблиць - онлайн-міграції.
8) Спостережуваність і SLO
Метрики: RPS, p50/95/99, 4xx/5xx, saturation (CPU/mem/queue), DLQ/лаг брокерів.
Бізнес-метрики: TTP (time-to-play), TtW (time-to-wallet), FTD-success, KYC-TtV.
Трейси: trace-id від шлюзу до БД.
SLO: наприклад, "Deposit p95 ≤ 300-500 мс", "success ≥ 98. 5%`, `availability ≥ 99. 9%`.
Burn rate алерти + авто-пауза релізів при деградації.
9) Інциденти, постмортеми, зміни
Runbooks на критичні потоки (депозит/виведення/КУС, live-ігри).
Шкала пріоритету: P1...P4, власник, ETA, комунікація (банер, статус-сторінка, партнери).
Blameless постмортем з action items і датами.
Чергування on-call, чат-оповіщення, статусні оновлення кожні N хвилин.
Док-слід: хто/коли/що викладав (commit, артефакт, середовище, прапор).
10) Безпека та комплаєнс (DevSecOps)
SAST/DAST/IAST, секрет-скан в CI.
mTLS servis↔servis, JWT з малим TTL, ротація ключів.
Masking PII/PAN в логах/трейсах; WORM-журнали адмін-дій.
Geo-segregation: кластери/БД по регіонах, маршрутизація через шлюз.
Change management: тікет/approval для чутливих зон (гаманець/ліміти).
11) DORA-метрики та FinOps
Deployment Frequency (щоденні малі релізи).
Lead Time for Changes (ідеал: годинник).
MTTR (відновлення: хвилини/години).
Change Failure Rate (мета ≤ 15%).
FinOps: вартість оточень, RPS-кешування, теплі пули, авто-пауза воркерів, «cost per transaction».
12) iGaming-специфіка
Піки (турніри/лайв): заморозки великих змін, прогрів кешу/образів, бусти квот.
Платежі/гаманець: окремі пули/вузли, підвищені SLO, канарний rollout по регіонах, подвійна телеметрія провайдерів PSP.
КУС/комплаєнс: окремий cadence релізів, обов'язкові пост-апруви комплаєнсу.
Партнери/афіліати: безпечні SDK, версія API з вікном підтримки і моніторингом старих клієнтів.
13) Приклад CI/CD (YAML, GitHub Actions → ArgoCD)
yaml name: ci-cd on:
push:
branches: [ main ]
paths: [ "services/wallet/" ]
jobs:
build_test_scan:
runs-on: ubuntu-latest steps:
- uses: actions/checkout@v4
- name: Setup Node uses: actions/setup-node@v4 with: { node-version: 22 }
- run: npm ci --omit=dev working-directory: services/wallet
- run: npm test -- --ci working-directory: services/wallet
- name: Lint & SAST run: npm run lint && npm run sast working-directory: services/wallet
- name: Build image run:
docker build -t registry. local/wallet:${{ github. sha }} -f Dockerfile.
cosign sign --key $COSIGN_KEY registry. local/wallet:${{ github. sha }}
- name: SBOM & Scan run:
syft packages registry. local/wallet:${{ github. sha }} -o cyclonedx-json > sbom. json trivy image --exit-code 1 --severity HIGH,CRITICAL registry. local/wallet:${{ github. sha }}
- name: Push image run: docker push registry. local/wallet:${{ github. sha }}
deploy_stage:
needs: build_test_scan runs-on: ubuntu-latest steps:
- uses: actions/checkout@v4
- name: Bump Helm values (image tag)
run: yq -i '.image. tag = "${{ github. sha }}"' helm/wallet/values-stage. yaml
- name: Create PR to gitops repo run: gh pr create -R org/gitops -B stage -H stage-bump/wallet-${{ github. sha }} -t "wallet:${{ github. sha }}" -b "Promote to stage"
promote_prod:
if: github. ref == 'refs/heads/main'
needs: deploy_stage runs-on: ubuntu-latest steps:
- name: Gate: SLO/quality checks run:./scripts/gates/check_stage_health. sh # p95, 5xx, e2e ok
- name: Canary 10%
run:./scripts/gitops/canary. sh wallet ${{ github. sha }} 10
- name: Auto-pause on degradation run:./scripts/gates/guardrails. sh./scripts/gitops/rollback. sh wallet
- name: Roll to 100%
run:./scripts/gitops/rollout. sh wallet ${{ github. sha }} 100
14) Чек-листи
Перед merge в main
- Unit/CDC/інтеграція зелені.
- Лінтери/SAST/ліцензії чисті.
- Оновлено схеми OpenAPI/AsyncAPI та міграції БД.
- Фіче-прапори додані, фоллбеки визначені.
Перед релізом в prod
- Образ підписаний, SBOM прикладений, уразливості HIGH/CRIT закриті.
- Дашборди/алерти створені; SLO-гейти підключені.
- План відкату, kill-switch, Shadow (якщо потрібно).
- Регіональні обмеження і політика даних підтверджені.
Інциденти
- Runbook знайдений і актуальний.
- Комунікація користувачам/партнерам (шаблон, ETA).
- Постмортем в 48 годин, action items з датами.
15) Анти-патерни
«Збираємо заново для кожного середовища» (немає промоушну артефакту).
Ручні кроки деплоя без аудиту/повторюваності.
Міграції БД «в лоб», несумісні відповіді API.
Секрети в змінних CI або в репозиторії.
Катастрофічні фічі без прапора/відкату.
Відсутність SLO/guardrails при канарському релізі.
Логи з PII/PAN, відсутність маскування.
16) Корисні шаблони microcopy
Реліз (партнерам):- "Ми викочуємо оновлення платіжного модуля поетапно (10%→100%). Можливі короткочасні затримки зарахування до 2 хвилин. ETA завершення - 21:00 EET.»
- "Платіжний провайдер X нестабільний. Зарахування може зайняти до 15 хвилин. Ми працюємо над виправленням. Наступне оновлення статусу - через 30 хвилин"
- "Оновлення призупинено через зростання затримок. Повертаємо попередню версію. Дані та операції збережені"
17) Процес впровадження (4 спринти)
1. Стандарти якості та пайплайн: SAST/Unit/CDC, єдиний образ, підписи, SBOM.
2. GitOps + оточення: Helm/Kustomize, ArgoCD, промоушн артефакту, політика секретів.
3. Прогресивні релізи і SLO-гейти: canary/shadow, guardrails, автопауза.
4. Надійність і вартість: хаос-тести, автоскейл/теплі пули, FinOps-дашборди.
Підсумкова шпаргалка
Trunk + flags + маленькі партії = швидкість без стресу.
Єдиний підписаний артефакт + SBOM = контрольований ланцюжок постачання.
GitOps + політики = відтворюваність і аудит.
Canary/Blue-Green + SLO-гейти = безпечні релізи.
Expand-and-contract для БД = нульові простої.
Спостережуваність і DORA = керовані поліпшення.
Регіональна ізоляція та комплаєнс = відповідність законам та довіра.