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=可管理的改进。
区域隔离和遵守=遵守法律和信任。