GH GambleHub

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
💡 アイデア:単一のイメージを収集して署名し、SBOMを公開し、GitOpsを通じてプロモートします。prod-rollout-カナリア、ガードレール付き。

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=管理可能な改善。
地域の孤立とコンプライアンス=法律と信頼の遵守。

Contact

お問い合わせ

ご質問やサポートが必要な場合はお気軽にご連絡ください。いつでもお手伝いします!

統合を開始

Email は 必須。Telegram または WhatsApp は 任意

お名前 任意
Email 任意
件名 任意
メッセージ 任意
Telegram 任意
@
Telegram を入力いただいた場合、Email に加えてそちらにもご連絡します。
WhatsApp 任意
形式:+国番号と電話番号(例:+81XXXXXXXXX)。

ボタンを押すことで、データ処理に同意したものとみなされます。