The team was doing 2 deployments per month because every deploy was a manual, anxiety-inducing event. Rollbacks required redeploying old images and took 30+ minutes. Main branch broke 8 times a month.
Built end-to-end: branch protection → optimized Docker builds → parallel tests → ArgoCD GitOps → Argo Rollouts Blue/Green with Prometheus-gated promotion.
Full pipeline: protected main, multi-stage Docker build (920MB → 118MB), parallel test matrix (22min → 4.5min), ArgoCD auto-sync, Blue/Green rollout with Prometheus analysis gates.
on:
push:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: docker/build-push-action@v5
with:
tags: ghcr.io/${{ github.repository }}:${{ github.sha }}
cache-from: type=registry,ref=ghcr.io/${{ github.repository }}:cache
update-manifest:
needs: build
run: |
yq e '.spec.template.spec.containers[0].image = "$IMAGE"' \
-i k8s-config/apps/production/deployment.yaml
git push # ArgoCD picks this up automaticallyDeploy frequency: 2×/month → 20×/month. Rollback time: 30 minutes → 30 seconds. Zero 503s during any deployment since implementation.
"Deployment became a non-event. The team ships 10× more frequently without scheduling maintenance windows or fearing rollbacks."