Skip to main content

Application Deployment β€” Enterprise Deploy Flow

This guide defines how developers ship applications to the cluster. The platform team owns the infrastructure β€” developers own their apps. This page is the contract between both.


The Golden Path (Helm + ArgoCD)​

Every application deployed to this platform follows the same flow:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Developer Machine β”‚
β”‚ git push β†’ GitLab (main branch) β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚
β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ GitLab CI Pipeline β”‚
β”‚ β”‚
β”‚ Stage 1: build β”‚
β”‚ β†’ docker build β”‚
β”‚ β†’ docker push harbor.local/myteam/myapp:v1.2.0 β”‚
β”‚ β”‚
β”‚ Stage 2: test β”‚
β”‚ β†’ unit tests β”‚
β”‚ β†’ vulnerability scan (Trivy in Harbor) β”‚
β”‚ β”‚
β”‚ Stage 3: package β”‚
β”‚ β†’ helm package ./chart β”‚
β”‚ β†’ helm push harbor.local/charts/myapp:v1.2.0 β”‚
β”‚ β”‚
β”‚ Stage 4: promote β”‚
β”‚ β†’ bump imageTag in gitops-repo/apps/myapp/values.yamlβ”‚
β”‚ β†’ git commit + push β†’ triggers ArgoCD β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚
β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ GitOps Repo β”‚
β”‚ apps/ β”‚
β”‚ β”œβ”€β”€ myapp/ β”‚
β”‚ β”‚ β”œβ”€β”€ values-staging.yaml ← staging overrides β”‚
β”‚ β”‚ └── values-prod.yaml ← prod overrides β”‚
β”‚ └── ArgoCD Application CRD β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚
β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ ArgoCD β”‚
β”‚ Detects: values changed β”‚
β”‚ Pulls chart from Harbor OCI registry β”‚
β”‚ Runs: helm upgrade myapp harbor/charts/myapp:v1.2.0 β”‚
β”‚ --values values-staging.yaml β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚
β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Kubernetes Cluster β”‚
β”‚ Namespace: myteam-staging β”‚
β”‚ β”œβ”€β”€ Deployment: myapp (3 replicas) β”‚
β”‚ β”œβ”€β”€ Service: myapp-svc β”‚
β”‚ β”œβ”€β”€ Ingress: myapp.staging.yourdomain.com β”‚
β”‚ β”œβ”€β”€ HPA: scale 3–10 on CPU/KEDA β”‚
β”‚ └── PVC: Longhorn volume (if stateful) β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Two Deployment Paths​

MethodWhen to UseManaged By
Helm + ArgoCDAll production workloadsGitOps repo + ArgoCD
Raw YAML + kubectlQuick debugging, one-off jobsDeveloper directly

Helm is the default. Raw YAML is allowed but not the standard path for persistent workloads.


Environment Strategy​

EnvironmentNamespaceAuto-deploy?Approval needed?
stagingmyteam-stagingYes (on merge to main)No
productionmyteam-prodNoYes β€” manual sync in ArgoCD

Developer Responsibilities​

βœ” Write and maintain the Helm chart in the app repo
βœ” Keep image tags semantic (v1.2.3 β€” not "latest")
βœ” Define resource requests and limits
βœ” Add readiness and liveness probes
βœ” Write the CI pipeline

Platform Team Responsibilities​

βœ” Own the cluster and namespaces
βœ” Maintain ArgoCD Applications
βœ” Manage Harbor projects and access
βœ” Define the standard Helm chart template (golden path)
βœ” Define resource quotas per team namespace

Namespace Convention​

<team>-staging β†’ myteam-staging
<team>-production β†’ myteam-prod
<team>-dev β†’ myteam-dev (optional β€” short-lived)

Each team gets isolated namespaces with quotas applied by the platform team via Terraform/Crossplane.


Naming Convention​

ResourceConventionExample
Docker imageharbor.local/<team>/<app>:<semver>harbor.local/payments/api:v2.1.0
Helm chartharbor.local/charts/<app>:<semver>harbor.local/charts/api:v2.1.0
Helm release<app>-<env>api-staging
Ingress host<app>.<env>.yourdomain.comapi.staging.yourdomain.com