DevOpsの実践とCI/CD
1)目標と原則
速く、安全:短い周期、変更の小さいバッチ、自動点検。
繰り返し可能性:コードとしてのインフラストラクチャ(IaC)、環境=コード+ポリシー。
Observability: メトリック/トレイル/logs out of the box、 SLO as a contract。
コンプライアンス:監査、変更管理、地域データの分離。
黄金のルール: 「最初の品質、その後、速度-そうでなければ速度が表示されません。」
2)支店と環境
トランクベースの+フィーチャーフラグ-基本的な選択。
短い特徴ライン(≤ 2-5日)、トランクの毎日のマージ。
増分配信と安全なロールバックのためのサーバーサイドフラグ。
Git環境:'dev'→'stage'→'prod'(+regional 'prod-eu'、 'prod-latam')。
アーティファクトのプロモーション:1つの収集された画像は、メディア(ダイジェストによる不変タグ)を介してプロモートされます。
GitFlow:規制アセンブリ/SDKのまれなリリース-ブランチ+「硬化」をリリースする場合。
3)品質と「赤線」のピラミッド"
1.静的解析(SAST、 Linter、ライセンス)。
2.単位/プロパティベースのテスト(秒)。
3.APIとイベント(OpenAPI/AsyncAPI、スキーマレジストリ)のための契約テスト(CDC)。
4.統合(テストコンテナ、ローカルブローカー)。
5.E2Eクリティカルパス:registration→KYC→deposit→game launch→output。
6.支払い/ウォレット/ゲームプロバイダのロード/カオステスト。
品質が通過しない→預金がブロックされます。変更記録なしでは「手動例外」はありません。
4)サプライチェーン
各イメージ/パッケージ(CycloneDX/SPDX)のSBOM。
アーティファクト署名(cosign)、入場時の「署名のみ」ポリシー。
SCA/Dependabot:脆弱性とライセンス。
Provenance/SLSA:再現可能なアセンブリ、クローズドビルドエージェント、証明。
Secrets:マネージャ(KMS/External Secrets)内では、リポジトリ/ログ内の単一の秘密ではありません。
5) GitOpsのIaC
Infra as Code: Terraform/Pulumi for Cloud;k8sのためのHelm/Kustomize。
GitOpsコントローラ(ArgoCD/Flux):宣言的マニフェスト、PRレビュー、監査証跡。
Windows/freezes:トーナメントウィーク/ピーク時間-本番リリースの自動停止。
OPA/Kyvernoポリシー:no':latest'、 non-root、 read-only FS、 hostPath disallow。
6)進歩的な配達
カナリア:1→5→10→25→50→100%ガードレールメトリクス(p95レイテンシ、5xx、エラー予算書き込み)。
ブルーグリーン:高速スイッチ+ロールバック計画。
シャドウ/ミラーリング:レスポンスに影響を与えずにリクエストをコピーします(新しいPSPアダプタの場合)。
フィーチャーフラグ:セグメント(リージョン/ロール/パートナー/チャネル)+キルスイッチによるインクルード。
7)データベース移行(拡張と契約)
ステップ1:スキーム(新しい列/インデックス)を展開します-古いコードと互換性があります。
ステップ2:両方のバージョン/フィールドに書き込まれるコードをダンプします。
ステップ3:背景ジョバのデータ移行、進捗メトリクス。
ステップ4:読み取りを新しいフィールドに切り替えます。
ステップ5:古いものを削除することは別のリリースです。
プライムタイムでDDL禁止をブロックする。ハイテーブル-オンライン移行。
8)観察可能性およびSLO
メトリクス:RPS、 p50/95/99、 4xx/5xx、飽和(CPU/mem/queue)、 DLQ/ブローカーラグ。
ビジネスメトリック:TTP (time-to-play)、 TtW (time-to-wallet)、 FTD-success、 KYC-TtV。
トレース:ゲートウェイからデータベースへのtrace-id。
SLO: 例えば、'Deposit p95 ≤ 300-500 ms'、'成功≥ 98。5%'、'可用性≥ 99。9%`.
劣化時のバーレートアラート+自動一時停止リリース。
9)事件、死後、シフト
クリティカルストリームのランブック(入金/出力/ACC、ライブゲーム)。
優先スケール:P1...P4、オーナー、ETA、コミュニケーション(バナー、ステータスページ、パートナー)。
アクションアイテムと日付で無傷の死後。
通話、チャットアラート、ステータスがN分ごとに更新されます。
Dock trail: who/when/what(コミット、アーティファクト、環境、フラグ)。
10)セキュリティとコンプライアンス(DevSecOps)
SAST/DAST/IAST、 CIでのシークレットスキャン。
mTLS servis↔servis、小さなTTLとJWT、キー回転。
ログ/トラックのPII/PANを覆うこと;WORM管理アクティビティログ。
Geo-segregation:地域別のクラスタ/データベース、ゲートウェイルーティング。
変更管理:機密領域(ウォレット/制限)のチケット/承認。
11) DORA指標とFinOps
展開頻度(毎日の小さなリリース)。
変更のリードタイム(理想的な:時計)。
MTTR(回復:分/時間)。
Change Failure Rate(ターゲット≤ 15%)。
FinOps:環境のコスト、RPSキャッシュ、ウォームプール、ワーカーの自動停止、「トランザクションあたりのコスト」。
12) iGaming特異性
ピーク(トーナメント/ライブ):大きな変更の凍結、キャッシュ/画像のウォームアップ、クォータブースト。
支払い/財布:個々のプール/ノード、高められたSLO、地域別のカナリアロールアウト、PSPプロバイダによるデュアルテレメトリー。
CC/コンプライアンス:リリースの個別のケイデンス、コンプライアンスの必須のポストアップデート。
パートナー/アフィリエイト:セキュアSDK、サポートウィンドウ付きAPIバージョン、古いクライアントの監視。
13)例CI/CD (YAML、 GitHubアクション→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)チェックリスト
メインにマージする前に
- 単位/CDC/統合緑。
- Linters/SAST/licensesがきれいです。
- OpenAPI/AsyncAPIスキーマとデータベースの移行を更新しました。
- Ficheフラグが追加され、follbacksが定義されました。
prodでリリースする前に
- 画像署名、SBOM添付、HIGH/CRIT脆弱性がクローズしました。
- 作成されたダッシュボード/アラート;SLOゲートが接続されています。
- ロールバック計画、キルスイッチ、シャドウ(必要に応じて)。
- 地域の制限とデータポリシーが確認されました。
インシデント
- 最新のRunbookが見つかりました。
- ユーザー/パートナーへのコミュニケーション(テンプレート、ETA)。
- 48時間での死後、日付付きのアクションアイテム。
15)アンチパターン
「あらゆる環境のための再構成」(アーティファクトプロモーションなし)。
監査/再現性のない手動デプロイステップ。
データベース移行「head-on」、互換性のないAPIレスポンス。
CI変数またはリポジトリ内のシークレット。
フラグ/ロールバックのない壊滅的な機能。
カナリアリリースのSLO/ガードレールが不足しています。
PII/PAN、マスキングなしでログを記録します。
16)便利なマイクロコピーのテンプレート
リリース(パートナーへ):- "決済モジュールの更新を段階的に展開しています(10%→100%)。最長2分の短期登録遅延が可能です。完了のETA-9午後EET"
- "決済プロバイダXは不安定です。入学には最大15分かかります。私たちは修正に取り組んでいます。次のステータス更新は30分で"
- "更新は遅延が増加しているため、保留中です。以前のバージョンを返します。データと操作が保存されました"
17)実装プロセス(4スプリント)
1.品質基準およびパイプライン:SAST/Unit/CDCの単一のイメージ、署名、SBOM。
2.GitOps+環境:Helm/Kustomize、 ArgoCD、アーティファクトプロモーション、シークレットポリシー。
3.プログレッシブリリースとSLOゲート:カナリア/シャドウ、ガードレール、オートハブ。
4.信頼性とコスト:カオステスト、オートスケール/ウォームプール、FinOpsダッシュボード。
最終的なチートシート
トランク+フラグ+小さなバッチ=ストレスのない速度。
シングルサインアーティファクト+SBOM=制御サプライチェーン。
GitOps+ポリシー=再現性と監査。
Canary/Blue-Green+SLOゲート=セキュアリリース。
DB=ゼロのダウンタイムの拡張と契約。
観測性とDORA=管理可能な改善。
地域の孤立とコンプライアンス=法律と信頼の遵守。