DevOps實踐和CI/CD
1)目標和原則
快速和安全:短周期,小批量更改,自動檢查。
可重復性:基礎架構為代碼(IaC),環境=代碼+策略。
可觀察性:量度/treas/log開箱即用,SLO作為合同。
合規性:審計,變更控制,區域數據隔離。
黃金規則: 「首先是質量,然後是速度-否則速度永遠不會出現。」
2)分支和環境
基於trunk+feature flags-基本選擇。
短的fiche分支(≤ 2-5天),每日行駛在幹線上。
用於增量交付和安全回滾的標誌(服務器側)。
Git環境:「dev」 → 「stage」 → 「prod」(+區域「prod-eu」,「prod-latam」)。
人工制品促銷:一個收集到的圖像通過環境(不可思議的標記通過文摘)進行推廣。
當GitFlow:罕見的監管組件/SDK版本是當時的發行分支+「硬化」。
3)質量金字塔和「紅線」
1.靜態分析(SAST,linter,許可證)。
2.單位/基於屬性的測試(秒)。
3.API和事件(OpenAPI/AsyncAPI,Schema Registry)的合同測試(CDC)。
4.整合(Testcontainers,本地經紀人)。
5.E2E關鍵途徑:註冊→ KYC →存款→遊戲啟動→退出。
6.用於支付/錢包/遊戲提供商的負載/混沌測試。
質量不通過,→被阻塞。沒有「手動例外」而不進行更改記錄。
4)軟件供應鏈(供應鏈)
每個映像/軟件包的SBOM(CycloneDX/SPDX)。
工件簽名(cosign),管理中的「僅簽名」策略。
SCA/Dependabot:漏洞和許可證。
Provenance/SLSA: 可重現的組件,封閉的廣告牌代理,attestations.
秘密:在管理器(KMS/外部秘密)中,回購/邏輯中沒有一個秘密。
5) GitOps и IaC
Infra as Code:雲的Terraform/Pulumi;Helm/Kustomize for k8s。
GitOps控制器(ArgoCD/Flux):聲明性宣言,公關評論,審核路徑。
窗口/凍結:錦標賽周/高峰時段-自動暫停發布。
OPA/Kyverno策略:no「:latest」, non-root, read-only FS, hostPath禁令。
6)漸進式交付
金絲雀:guardrail度量的1→5→10→25→50→100%(p95 latency,5xx,error budget burn)。
藍綠色:快速開關+回滾計劃。
Shadow/Mirroring:復制請求而不影響響應(針對新的PSP適配器)。
Feature flags:逐段啟用(區域/角色/合作夥伴/通道)+kill-switch。
7)DB遷移(外包和合同)
步驟1:擴展模式(新列/索引)-與舊代碼兼容。
步驟2:將代碼丟棄到兩個版本/字段中。
步驟3:後臺喬布數據遷移,進度指標。
步驟4:將讀取切換到新字段。
步驟5:刪除舊版本-單獨發布。
黃金時段禁止DDL阻塞;對於高表-在線遷移。
8)可觀察性和SLO
度量標準:RPS,p50/95/99,4xx/5xx,aturation(CPU/mem/queue),DLQ/Lag經紀人。
業務指標:TTP(時間到遊戲),TtW(時間到錢包),FTD-success,KYC-TtV。
Traces:從網關到DB的trace-id。
SLO: 例如"Deposit p95 ≤ 300-500 ms","成功≥ 98。5%`, `availability ≥ 99.9%`.
Burn rate alerta+降級時自動暫停發布。
9)事件,驗屍後,輪班
關鍵流(存款/輸出/KUS,現場遊戲)的運行手冊。
優先級量表:P1...P4,所有者,ETA,溝通(橫幅,狀態-頁面,合作夥伴)。
Blameless具有動作項和日期。
呼叫交替,聊天警報,每N分鐘進行狀態更新。
碼頭足跡:誰/何時/何處布置(commit,工件,環境,標誌)。
10)安全和合規性(DevSecOps)
SAST/DAST/IAST,CI中的秘密掃描。
mTLS servis↔servis,JWT與小TTL,鍵輪換。
Logs/Trace中的Masking PII/PAN;WORM管理操作日誌。
Geo-segregation: 按區域分組/DB,通過網關路由。
更改管理:用於敏感區域(錢包/限制)的滴答聲/應用。
11) DORA度量和FinOps
部署頻率(每日小版本)。
Lead Time for Changes(理想:時鐘)。
MTTR(恢復:分鐘/小時)。
更改失敗率(目標≤ 15%)。
FinOps:環境成本,RPS緩存,溫暖池,自動停頓竊聽器,「按交易成本」。
12) iGaming特點
高峰(比賽/輕量級):凍結重大變化,加熱緩存/圖像,配額提升。
付款/錢包:單獨的池/節點,升級的SLO,按地區分列的金絲雀滾動,PSP提供商的雙重遙測。
CUS/合規性:單獨的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)支票單
在main的merge之前
- 單位/CDC/集成綠色。
- Linters/SAST/許可證清潔。
- 已更新OpenAPI/AsyncAPI模式和DB遷移。
- 添加了Fiche標誌,並定義了Fallbacks。
在prod中發布之前
- 映像已簽名,附有SBOM,HIGH/CRIT漏洞已關閉。
- 創建了Dashbords/Alertes;SLO門已連接。
- 回滾計劃,kill-switch, Shadow(如果需要)。
- 區域限制和數據政策得到確認。
事件
- Runbook被發現並相關。
- 用戶/合作夥伴通信(模板,ETA)。
- Postmortham在48小時,動作項目與日期。
15)反模式
「我們為每個環境重新組裝」(沒有人工制品促銷活動)。
無審計/可重復性的手動降級步驟。
DB「正面」遷移,API響應不兼容。
CI變量或存儲庫中的秘密。
沒有旗幟/回滾的災難性仙女。
金絲雀釋放時缺乏SLO/guardrails。
使用PII/PAN的徽標,沒有掩蓋。
16)有用的微拷貝模式
發行版(合作夥伴):- "我們分階段推出支付模塊更新(10%→100%)。入學可能會短暫延遲2分鐘。ETA完成-EET晚上9點"
- "支付提供商X不穩定。入學可能需要長達15分鐘的時間。我們正在努力修復。下一次狀態更新是30分鐘後"
- "更新因延誤增加而暫停。我們將返回以前的版本。保存數據和操作"
17)實施過程(4沖刺)
1.質量和管道標準:SAST/Unit/CDC、單一映像、簽名、SBOM。
2.GitOps+隨行人員:Helm/Kustomize,ArgoCD,工件促銷活動,秘密政策。
3.漸進版本和SLO門: canary/shadow, guardrails, autows.
4.可靠性和成本:混沌測試,自動軌道/溫暖池,FinOps-dashbords。
最終的spargalka
Trunk+flags+小批量=無壓力速度。
單個簽名工件+SBOM=受控供應鏈。
GitOps+策略=可復制性和審核性。
Canary/Blue-Green+SLO門=安全版本。
DB的擴展和合同=零停機時間。
可觀察性和DORA=可管理的改進。
區域隔離和遵守=遵守法律和信任。