-
DevOps – Rollback Plan
DevOps – Rollback Plan # cloudbuild.yaml with rollback step steps: # … build and deploy steps … # Deploy new version – name: 'gcr.io/cloud-builders/gcloud' args: – 'run' – 'deploy' – '$_SERVICE_NAME' – '–image' – '$_ARTIFACT_REGISTRY/$_IMAGE_NAME:$COMMIT_SHA' – '–region' – '$_REGION' – '–no-traffic' # Deploy but don't send traffic yet! id: 'Deploy New Revision' # Gradually shift traffic (canary) – name: 'gcr.io/cloud-builders/gcloud' args: – 'run' – 'services' – 'update-traffic' – '$_SERVICE_NAME' – '–to-revisions' – '$COMMIT_SHA=10' # 10% traffic – '–region' – '$_REGION' id: 'Canary (10%)' # Health check – wait and monitor – name: 'bash' args: – '-c' – | echo "Waiting
-
DevOps – Monitoring – Know When Its Fail
DevOps – Monitoring – Know When Its Failed # app/logger.py — Set up structured logging import logging import json from datetime import datetime class StructuredLogger: def __init__(self, name, **default_context): self.logger = logging.getLogger(name) self.default_context = default_context def _log(self, level, message, **context): """Log in structured JSON format""" log_entry = { "timestamp": datetime.utcnow().isoformat(), "level": level, "message": message, **self.default_context, **context } # Print JSON to stdout (Cloud Logging picks it up) print(json.dumps(log_entry)) def info(self, message, **context): self._log("INFO", message, **context) def error(self, message, **context): self._log("ERROR", message, **context) def warning(self, message, **context): self._log("WARNING", message, **context) # Create a global logger with default context logger = StructuredLogger(
-
DevOps – Build A CI/CD Pipeline
DevOps – Build A CI/CD Pipeline # cloudbuild.yaml — The Recipe for Your Pipeline steps: # ============================================ # STEP 1: Run Tests # ============================================ – name: 'python:3.11-slim' entrypoint: 'bash' args: – '-c' – | pip install pytest pytest-cov pip install -r requirements.txt pytest tests/ – cov=app/ id: 'Run Tests' # ============================================ # STEP 2: Build Docker Image # ============================================ – name: 'gcr.io/cloud-builders/docker' args: – 'build' – '-t' – '$_ARTIFACT_REGISTRY/$_IMAGE_NAME:$COMMIT_SHA' – '-t' – '$_ARTIFACT_REGISTRY/$_IMAGE_NAME:latest' – '.' id: 'Build Image' # ============================================ # STEP 3: Push to Artifact Registry # ============================================ – name: 'gcr.io/cloud-builders/docker' args: – 'push' – '$_ARTIFACT_REGISTRY/$_IMAGE_NAME:$COMMIT_SHA' id: 'Push Image'
-
DevOps – IAM Just Enough To Be Safe
DevOps – IAM Just Enough To Be Safe
-
DevOps – Secret And Config
DevOps – Secret & Config
-
DevOps – Choose Your Deployment Target
DevOps – Choose Your Deployment Target
-
DevOps – Push The Image To GCP
DevOps –Push The Image To GCP
-
DevOps – Deocker Non Negotiable
DevOps – Docker Non Negotable
-
DevOps – Wrapping The Model In LightWeight API .
DevOps – Wrapping The Model Into A Light Weight API . (1) Wrap The Model In A LightWeight API (2) Pin Exact Dependency Versions (3) Pin Exact Dependency Versions
-
DevOps – Getting Started
DevOps – Getting Started
