Demonstração de GitOps profissional com ArgoCD em cluster Kind local. Usa App of Apps + ApplicationSet com directory generator para gerenciar múltiplos ambientes (dev/staging/prod) automaticamente a partir do Git.
Git Repository (fonte da verdade)
│
▼
ArgoCD (namespace: argocd)
│
▼
Root App (App of Apps)
apps/root-app.yaml
│
▼
ApplicationSet (directory generator)
apps/children/appset-podinfo.yaml
escaneia: environments/*/podinfo/
│
├──▶ podinfo-dev (v6.0.0, 1 replica) → namespace: podinfo-dev
├──▶ podinfo-staging (v6.3.0, 2 replicas) → namespace: podinfo-staging
└──▶ podinfo-prod (v6.7.0, 3 replicas) → namespace: podinfo-prod
# Clonar o repositório
git clone https://github.com/fabioaragao/gitops-argocd
cd gitops-argocd
# Executar o setup (idempotente)
./scripts/setup.shO script:
- Cria o cluster Kind
portfolio - Instala ArgoCD via Helm
- Aplica o Root App — ArgoCD assume o controle de tudo a partir daqui
# ArgoCD
kubectl port-forward svc/argocd-server -n argocd 8080:443
# Acesse: http://localhost:8080
# Usuário: admin | Senha: exibida no final do setup.sh
# podinfo dev
kubectl port-forward svc/podinfo -n podinfo-dev 9898:9898
# Acesse: http://localhost:9898
# podinfo staging
kubectl port-forward svc/podinfo -n podinfo-staging 9899:9898
# Acesse: http://localhost:9899
# podinfo prod
kubectl port-forward svc/podinfo -n podinfo-prod 9900:9898
# Acesse: http://localhost:9900# 1. Editar environments/prod/podinfo/Chart.yaml
# Mudar: version: "6.7.0" → version: "6.7.3"
# E a linha: version: "6.7.0" → version: "6.7.3" (em dependencies)
# 2. Editar environments/prod/podinfo/values.yaml
# Mudar: tag: "6.7.0" → tag: "6.7.3"
# 3. Commitar e fazer push
git add environments/prod/podinfo/
git commit -m "chore: promote podinfo v6.7.3 to prod"
git push
# 4. Observar o ArgoCD sincronizar automaticamente (~30s)
kubectl get applications -n argocd --watchNa UI do ArgoCD, a Application podinfo-prod passará de Synced → OutOfSync → Synced.
Ver: docs/adding-environments.md
.
├── argocd/
│ └── install-values.yaml # Helm values do ArgoCD
├── apps/
│ ├── root-app.yaml # App of Apps (único apply manual)
│ └── children/
│ └── appset-podinfo.yaml # ApplicationSet com directory generator
├── environments/
│ ├── dev/podinfo/ # Chart.yaml + values.yaml (v6.0.0, 1 replica)
│ ├── staging/podinfo/ # Chart.yaml + values.yaml (v6.3.0, 2 replicas)
│ └── prod/podinfo/ # Chart.yaml + values.yaml (v6.7.0, 3 replicas)
├── scripts/
│ └── setup.sh # Setup idempotente
└── docs/
└── adding-environments.md # Como adicionar novos ambientes
# Remover o cluster (preserva o código local)
kind delete cluster --name portfolio