Pular para o conteúdo principal

Estratégia de Repositórios

Estrutura em Dois Níveis

github.com/myorg/

├── platform-gitops/ ← propriedade da equipe de plataforma
│ ├── argocd/ ← AppProjects + ApplicationSets (todos os domínios)
│ ├── crossplane/ ← Providers + XRDs + Compositions
│ ├── k8s/platform/ ← Manifestos de serviços de plataforma
│ ├── k8s/rbac/ ← Bindings RBAC de grupos e usuários
│ └── backstage-templates/ ← Todos os templates Scaffolder

├── payments-gitops/ ← propriedade da equipe de payments
│ ├── k8s/ ← Manifestos de app (todos os envs)
│ ├── crossplane/claims/ ← Claims Crossplane (todos os envs)
│ └── catalog/ ← Entidades Backstage para este domínio

└── orders-gitops/ ← propriedade da equipe de orders
├── k8s/
├── crossplane/claims/
└── catalog/

Divisão de Responsabilidades

O quêOndeQuem
AppProjectsplatform-gitops/argocd/projects/Equipe de plataforma
ApplicationSetsplatform-gitops/argocd/applicationsets/Equipe de plataforma
Crossplane Providers / XRDs / Compositionsplatform-gitops/crossplane/Equipe de plataforma
Manifestos de serviços de plataformaplatform-gitops/k8s/platform/Equipe de plataforma
Manifestos RBAC (grupos + usuários)platform-gitops/k8s/rbac/Equipe de plataforma
Templates Backstageplatform-gitops/backstage-templates/Equipe de plataforma
Manifestos de app (todos os envs){domain}-gitops/k8s/Equipe de domínio
Claims Crossplane{domain}-gitops/crossplane/claims/Equipe de domínio
Entidades do catálogo Backstage{domain}-gitops/catalog/Equipe de domínio

A Regra Principal

platform-gitops controla onde e como as coisas são implantadas. {domain}-gitops controla o quê é implantado. Times de domínio nunca escrevem configuração ArgoCD ou Compositions Crossplane. A equipe de plataforma nunca escreve manifestos de domínio ou Claims.

ApplicationSet — Repositório Central, Fonte do Domínio

# platform-gitops/argocd/applicationsets/payments-gateway.yaml
spec:
generators:
- matrix:
generators:
- list:
elements:
- service: api
- service: worker
- clusters:
selector:
matchExpressions:
- key: env
operator: In
values: [dev, staging, prod]
template:
spec:
source:
repoURL: https://github.com/myorg/payments-gitops # ← repositório do domínio
path: k8s/{{name}}/{{service}} # k8s/prod/api
destination:
namespace: payments-{{name}}-{{service}} # payments-prod-api

Estratégia de Branch

Prefira separação de ambientes por pasta (k8s/{env}/) em vez de branch por ambiente. Branches tornam diffs e promoções entre ambientes mais difíceis.

platform-gitops / {domain}-gitops → apenas main (sem branches de ambiente)
ArgoCD → sempre acompanha HEAD do main

Aplicação via CODEOWNERS

# platform-gitops
/argocd/ @myorg/team-platform
/crossplane/ @myorg/team-platform
/k8s/rbac/ @myorg/team-platform
/backstage-templates/ @myorg/team-platform

# {domain}-gitops
/k8s/ @myorg/team-{domain}
/crossplane/claims/ @myorg/team-{domain}
/catalog/ @myorg/team-{domain}
/.github/ @myorg/team-platform @myorg/team-{domain}