Praktyki DevOps i CI/CD
1) Cele i zasady
Szybkie i bezpieczne: krótkie cykle, małe partie zmian, automatyczne kontrole.
Powtarzalność: infrastruktura jako kod (IaC), środowisko = kod + polityka.
Obserwowalność: metryki/szlaki/kłody z pudełka, SLO jako kontrakt.
Zgodność: audyt, kontrola zmian, regionalna izolacja danych.
Złota zasada: „Pierwsza jakość, potem prędkość - inaczej prędkość nigdy nie pojawi się”.
2) Oddziały i środowiska
Flagi na bazie Trunk + - podstawowy wybór.
Krótkie linie funkcyjne (≤ 2-5 dni), codzienne połączenie w pniu.
Flagi po stronie serwera do przyrostowej dostawy i bezpieczne rolki.
Środowiska git: 'dev' → 'stage' → 'prod' (+ regionalne' prod-eu ',' prod-latam ').
Promocja artefaktów: jeden zebrany obraz jest promowany za pośrednictwem mediów (niezmienny znacznik przez trawienie).
Kiedy GitFlow: rzadkie wydania zespołów regulacyjnych/SDK - następnie zwolnić gałęzie + „utwardzanie”.
3) Piramida jakości i „czerwona linia”
1. Analiza statyczna (SAST, lintery, licencje).
2. Badanie jednostkowe/na podstawie właściwości (sekundy).
3. Testy kontraktowe (CDC) dla API i zdarzeń (OpenAPI/AsyncAPI, Schema Registry).
4. Integracja (Testcontainers, lokalnych brokerów).
5. E2E ścieżki krytyczne: rejestracja → KYC → depozyt → uruchomienie gry → wyjście.
6. Testy ładowania/chaosu dla dostawców płatności/portfela/gier.
Jakość nie przechodzi → depozyt jest zablokowany. Nie ma „ręcznych wyjątków” bez rekordu zmiany.
4) Łańcuch dostaw
SBOM dla każdego obrazu/pakietu (CycloneDX/SPDX).
Podpisy artefaktowe (cosign), „podpisane tylko” polityka w przyjmowaniu.
SCA/Dependabot: luki i licencje.
Pochodzenie/SLSA: powtarzalne zespoły, zamknięty środek budowlany, zaświadczenia.
Sekrety: w menedżerze (KMS/External Secrets), ani jednej tajemnicy w repo/logach.
5) GitOps (IaC)
Infra jako kod: Terraform/Pulumi dla chmury; Helm/Kustomize dla k8.
Kontroler GitOps (ArgoCD/Flux): manifesty deklaracyjne, przegląd PR, ścieżka audytu.
Windows/freezes: tygodnie turnieju/godziny szczytu - auto-pauza wydań produkcyjnych.
Zasady OPA/Kyverno: nie ': najnowsze', non-root, tylko do odczytu FS, na Disallow.
6) Stopniowa dostawa
Kanaryjski: 1 → 5 → 10 → 25 → 50 → 100% na mierniki bariery (p95 opóźnienia, 5xx, spalić budżet błędu).
Niebiesko-zielony: szybki przełącznik + plan wsteczny.
Shadow/Mirroring: kopiowanie żądań bez wpływu na odpowiedź (dla nowych adapterów PSP).
Flagi funkcji: włączenie według segmentu (region/rola/partner/kanał) + kill-switch.
7) Migracja bazy danych (rozszerzenie i kontrakt)
Krok 1: rozwiń schemat (nowe kolumny/indeksy) - zgodny ze starym kodem.
Krok 2: zrzucić kod, który pisze do obu wersji/pól.
Krok 3: migracja danych w tle joba, wskaźniki postępu.
Krok 4: Przełącz odczyt na nowe pola.
Krok 5: Usunięcie starego jest oddzielnym wydaniem.
Blokowanie zakazu DDL w prime time; dla wysokich stołów - migracje online.
8) Obserwowalność i SLO
Metryka: RPS, p50/95/99, 4xx/5xx, nasycenie (CPU/mem/kolejka), DLQ/broker lag.
Wskaźniki biznesowe: TTP (czas do grania), TtW (czas do portfela), FTD-sukces, KYC-TtV.
Ślady: ślad-id od bramy do bazy danych.
SLO: na przykład "Deposit p95 ≤ 300-500 ms", "success ≥ 98. 5% ',' dostępność ≥ 99. 9%`.
Alerty szybkości spalania + uwolnienia automatyczne podczas degradacji.
9) Incydenty, zwłoki, zmiany
Książki startowe na strumieniach krytycznych (depozyt/wyjście/ACC, gry na żywo).
Skala priorytetowa: P1...P4, właściciel, ETA, komunikacja (baner, strona statusu, partnerzy).
Nienaganny postmortem z elementami akcji i datami.
Alternatywy dyżuru, czat, aktualizacje stanu co N minut.
Trasa dokująca: kto/kiedy/co opublikowane (commit, artefakt, środowisko, flaga).
10) Bezpieczeństwo i zgodność (DevSecOp)
SAST/DAST/IAST, tajne skanowanie w CI.
mTLS servis, JWT z małym TTL, obrót klucza.
Maskowanie PII/PAN w logach/torach; Dzienniki aktywności administratora WORM.
Segregacja geograficzna: klastry/bazy danych według regionu, routing bramy.
Zarządzanie zmianą: bilet/zatwierdzenie dla obszarów wrażliwych (portfel/limity).
11) mierniki DORA i FinOp
Częstotliwość rozmieszczenia (codziennie małe wydania).
Czas realizacji zmian (idealny: zegarek).
MTTR (odzyskiwanie: minuty/godziny).
Zmiana wskaźnika awarii (cel ≤ 15%).
FinOps: koszt środowiska, buforowanie RPS, ciepłe baseny, auto-pauza pracowników, „koszt za transakcję”.
12) Specyfika iGaming
Szczyty (turnieje/na żywo): zamrażanie głównych zmian, rozgrzewanie pamięci podręcznej/obrazów, zwiększanie kwot.
Płatności/torebka: pojedyncze puli/węzły, podwyższone SLO, rollout kanaryjski według regionu, podwójna telemetria przez dostawców PSP.
CC/zgodność: oddzielna kadencja wydań, obowiązkowe po aktualizacji zgodności.
Partnerzy/Partnerzy: bezpieczne SDK, wersja API z oknem wsparcia i monitoringu starych klientów.
13) Przykład 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) Listy kontrolne
Przed połączeniem z głównym
- Jednostka/CDC/integracja zielona.
- Linters/SAST/licencje są czyste.
- Aktualizacja schematów OpenAPI/AsyncAPI i migracji baz danych.
- Dodano kartki, zdefiniowano pęcherzyki.
Przed uwolnieniem w prod
- Podpisano obraz, dołączono SBOM, zamknięto luki HIGH/CRIT.
- Stworzone deski rozdzielcze/wpisy; Bramy SLO są połączone.
- Plan rollback, kill-switch, Cień (jeśli to konieczne).
- Regionalne ograniczenia i polityka danych potwierdzone.
Incydenty
- Znaleziono i zaktualizowano książkę startową.
- Komunikacja z użytkownikami/partnerami (szablon, ETA).
- Postmortem w 48 godzin, pozycje akcji z datami.
15) Anty-wzory
„Reassembling dla każdego środowiska” (brak promocji artefaktu).
Ręcznie wdrażać kroki bez audytu/powtarzalności.
Migracje bazy danych „head-on”, niezgodne odpowiedzi API.
Sekrety w zmiennych CI lub w repozytorium.
Katastrofalne cechy bez flagi/rolki.
Brak SLO/barierek na kanarkach.
Dzienniki z PII/PAN, bez maskowania.
16) Przydatne szablony mikrokopii
Uwolnienie (do partnerów):- "Wprowadzamy aktualizację modułu płatności w etapach (10% → 100%). Możliwe są krótkoterminowe opóźnienia zapisu do 2 minut. ETA ukończenia - 9 p.m. EET "
- "Dostawca płatności X jest niestabilny. Rejestracja może potrwać do 15 minut. Pracujemy nad naprawą. Następna aktualizacja stanu jest za 30 minut"
- "Aktualizacja jest wstrzymana ze względu na rosnące opóźnienia. Zwracamy poprzednią wersję. Dane i operacje zostały zapisane"
17) Proces wdrażania (4 sprinty)
1. Normy jakości i rurociąg: SAST/Unit/CDC, pojedynczy obraz, podpisy, SBOM.
2. GitOps + środowiska: Helm/Kustomize, ArgoCD, promocja artefaktu, tajna polityka.
3. Progresywne wydania i bramy SLO: kanaryjski/cień, poręcze, auto-hub.
4. Niezawodność i koszt: testy chaosu, autoskale/ciepłe baseny, deski rozdzielcze FinOps.
Końcowy arkusz oszustwa
Bagażnik + flagi + małe partie = prędkość wolna od stresu.
Pojedynczy podpisany artefakt + SBOM = kontrolowany łańcuch dostaw.
Polityka GitOps + = odtwarzalność i audyt.
Bramki Canary/Blue-Green + SLO = bezpieczne wydania.
Rozszerzenie i kontrakt dla DB = zerowy czas przestoju.
Obserwowalność i DORA = udoskonalenia do zarządzania.
Izolacja regionalna i zgodność = zgodność z prawem i zaufanie.