From bfaf5edbbab62fa98dba060b93b9fe845b265673 Mon Sep 17 00:00:00 2001 From: Tiago Ribeiro Date: Sun, 1 Mar 2026 16:55:52 -0300 Subject: [PATCH] docs(nexus): adiciona analise completa de pipelines MFE e MS Mapeia o que existe, o que esta faltando e o que bloqueia o ambiente: - 9 MSs com pipeline OCI via ArgoCD (feature branch errada no template) - ms-barramento com trigger e deploy target incorretos - Variable group oci-terraform pode estar incompleto - ArgoCD URL quebrada (ja conhecida) - Credenciais OCI hardcoded nos k8s overlays - Checklist de acoes para o ambiente subir --- inventcloud/invista/nexus/PIPELINE-ANALISE.md | 262 ++++++++++++++++++ 1 file changed, 262 insertions(+) create mode 100644 inventcloud/invista/nexus/PIPELINE-ANALISE.md diff --git a/inventcloud/invista/nexus/PIPELINE-ANALISE.md b/inventcloud/invista/nexus/PIPELINE-ANALISE.md new file mode 100644 index 0000000..66fb145 --- /dev/null +++ b/inventcloud/invista/nexus/PIPELINE-ANALISE.md @@ -0,0 +1,262 @@ +# Análise de Pipelines — MFEs e Microserviços + +> **Data:** 2026-03-01 | **Escopo:** O que existe, o que está faltando e o que impede o ambiente de subir. + +--- + +## Arquitetura de Deploy (MS) + +``` +push → branch devops + │ + ▼ +Azure DevOps Pipeline (azure-pipelines.yaml) + │ + ├─ Stage: Build (CI) — roda em QUALQUER branch + │ └─ ci/build-template.yaml@templates (build .NET + unit/integration tests) + │ + └─ Stage: Deploy_DEV — só roda se branch == devops + │ + ├─ job: Push_OCI + │ └─ ci/push-ocir-template.yaml → build Docker + push para OCIR (gru.ocir.io) + │ + └─ deployment: Deploy_OCI + ├─ cd/oci-kubeconfig.yml → gera kubeconfig do cluster OKE + ├─ cd/argocd-repo-secret.yml → cria Secret do repo no ArgoCD + ├─ cd/argocd-apply-app.yml → aplica Application ArgoCD (k8s/overlays/oci) + ├─ cd/argocd-ensure-ingress-nginx.yml → garante ingress-nginx no cluster + ├─ cd/terraform-apply-networkrules.yml → (opcional) aplica regras de rede + ├─ cd/terraform-private-dns.yml → DNS privado via kubectl/ingress + ├─ cd/cloudflare-dns.yml → cria CNAME no Cloudflare + └─ cd/validate-dns-http-incluster.yml → valida o deploy +``` + +--- + +## Status por Microserviço + +| MS | Branch trigger | Deploy target padrão | Template branch | Namespace | Cluster | +|----|---------------|---------------------|----------------|-----------|---------| +| ms-auth-external | `devops` ✅ | `oci-argocd` ✅ | `feature/cd-deploy-oci-oke` ⚠️ | nexus-services | cls-dev-nexus | +| ms-auth-sso | `devops` ✅ | `oci-argocd` ✅ | `feature/cd-deploy-oci-oke` ⚠️ | nexus-services | cls-dev-nexus | +| ms-barramento | `develop` ❌ | `aws` ❌ | `feature/cd-deploy-oci-oke` ⚠️ | integration-hub | cls-dev-nexus | +| ms-belt | `devops` ✅ | `oci-argocd` ✅ | `feature/cd-deploy-oci-oke` ⚠️ | nexus-services | cls-dev-nexus | +| ms-notify | `devops` ✅ | `oci-argocd` ✅ | `feature/cd-deploy-oci-oke` ⚠️ | nexus-services | cls-dev-nexus | +| ms-parameters | `devops` ✅ | `oci-argocd` ✅ | `feature/cd-deploy-oci-oke` ⚠️ | nexus-services | cls-dev-nexus | +| ms-person | `devops` ✅ | `oci-argocd` ✅ | `feature/cd-deploy-oci-oke` ⚠️ | nexus-services | cls-dev-nexus | +| ms-poc | `devops` ✅ | `oci-argocd` ✅ | `feature/cd-deploy-oci-oke` ⚠️ | nexus-services | cls-dev-nexus | +| ms-user | `devops` ✅ | `oci-argocd` ✅ | `feature/cd-deploy-oci-oke` ⚠️ | nexus-services | cls-dev-nexus | + +--- + +## Status por MFE + +| MFE | Branch trigger | Template branch | Bucket | Deploy target | +|-----|---------------|----------------|--------|---------------| +| mfe-shell | `devops` ✅ | `main` ✅ | mfe-shell-dev ✅ | OCI Object Storage | +| mfe-auth | `devops` ✅ | `main` ✅ | mfe-auth-dev ✅ | OCI Object Storage | +| mfe-user | `devops` ✅ | `main` ✅ | mfe-user-dev ✅ | OCI Object Storage | +| mfe-person | `devops` ✅ | `main` ✅ | mfe-person-dev ✅ | OCI Object Storage | +| mfe-formalization | `devops` ✅ | `main` ✅ | mfe-formalization-dev ✅ | OCI Object Storage | +| mfe-poc | `devops` ✅ | `main` ✅ | mfe-poc-dev ✅ | OCI Object Storage | + +> MFEs: pipeline mais simples e já funcional. **O problema está nos MSs.** + +--- + +## Problemas Críticos (bloqueiam o ambiente) + +### 🔴 P1 — Templates apontando para branch `feature/cd-deploy-oci-oke` (não `main`) + +**Todos os 9 MSs** têm no `azure-pipelines.yaml`: +```yaml +resources: + repositories: + - repository: templates + type: git + name: azure-pipelines-templates + ref: refs/heads/feature/cd-deploy-oci-oke # ← branch de feature, não main! +``` + +**Risco:** Se essa branch for deletada (ex: após merge), todas as pipelines quebram simultaneamente. + +**Correção:** Fazer merge da `feature/cd-deploy-oci-oke` para `main` no repo `azure-pipelines-templates` e atualizar todos os MSs para `ref: refs/heads/main`. + +--- + +### 🔴 P2 — ms-barramento com trigger e deploy target errados + +```yaml +# ms-barramento/azure-pipelines.yaml +condition: and(succeeded(), eq(variables['Build.SourceBranchName'], 'develop')) # ← deveria ser 'devops' +default: aws # ← deveria ser 'oci-argocd' +``` + +**Resultado:** Push na branch `devops` do ms-barramento NÃO dispara deploy para OCI. + +**Correção:** Alterar condition para `devops` e default para `oci-argocd`. + +--- + +### 🔴 P3 — Variable Group `oci-terraform` incompleto para deploy de MS + +O template `oci-kubeconfig.yml` precisa de `OKE_CLUSTER_OCID` — o OCID do cluster OKE. +O template `argocd-apply-app.yml` precisa de `OCIR_USERNAME`, `OCIR_AUTH_TOKEN`. + +**Variáveis que podem estar faltando no VG `oci-terraform`:** + +| Variável | Necessário para | Observação | +|----------|----------------|-----------| +| `OKE_CLUSTER_OCID` | kubeconfig do cluster | Específico por cluster | +| `OCI_CLUSTER_OCID_OVERRIDE` | override de cluster | Opcional | +| `OCIR_REGISTRY` | push Docker image | `gru.ocir.io` | +| `OCIR_NAMESPACE` | push Docker image | `grbb7qzeuoag` | +| `OCIR_REPOSITORY_NAME` | push Docker image | nome do repo no OCIR | +| `OCIR_USERNAME` | pull secret no K8s | `grbb7qzeuoag/` | +| `OCIR_AUTH_TOKEN` | pull secret no K8s | Auth Token OCI | +| `ARGOCD_REPO_URL` | URL do repo no ArgoCD | URL Azure DevOps do MS | +| `ARGOCD_REPO_PAT` | PAT para ArgoCD clonar | PAT Azure DevOps | + +--- + +### 🔴 P4 — ArgoCD com URL Git quebrada + +`argocd/application-dev.yaml` (no `tf_oci_clusters`): +```yaml +repoURL: https://dev.azure.com/CN-Squad/Invista%20FIDC%20-%20Nexus/_gitinvista-config +# ↑ falta / aqui +``` +Deve ser: +```yaml +repoURL: https://dev.azure.com/CN-Squad/Invista%20FIDC%20-%20Nexus/_git/invista-config +``` + +--- + +### 🔴 P5 — Credenciais OCI hardcoded no k8s/overlays/oci + +O arquivo `k8s/overlays/oci/oci-credentials.yaml` do ms-auth-external (e possivelmente outros) contém OCIDs e chave privada OCI diretamente no repositório Git. + +**Risco:** Credenciais expostas no código. Qualquer pessoa com acesso ao repo tem as credenciais. + +**Correção:** Usar Kubernetes External Secrets ou passar via pipeline sem commitar. + +--- + +## O que está no Terraform vs o que não está + +### ✅ Gerenciado pelo Terraform (`tf_oci_clusters`) + +| Recurso | Estado | +|---------|--------| +| VCN `vcn-oke` (10.110.0.0/16) + subnets | ✅ Terraform | +| 3 clusters OKE (nexus, barramento, observabilidade) | ✅ Terraform | +| 9 node pools (VM.Standard.E4.Flex 2cpu/16GB) | ✅ Terraform | +| ArgoCD (Helm, instalado via Terraform null_resource) | ✅ Terraform | +| API Gateway MFE (`api-gateway-mfe-dev`) | ✅ Terraform | +| Subnet `sbn-api-gateway` (10.110.192.0/20) | ✅ Terraform | +| Bastion host (quando `enable_bastion=true`) | ✅ Terraform | +| Alarms OCI Monitoring (CPU) | ✅ Terraform | +| Remote state (bucket `tfstate-terraform`) | ✅ Terraform | + +### ❌ Manual / Fora do Terraform + +| Recurso | Como existe | Risco | +|---------|-------------|-------| +| VCN-DEV (10.6.0.0/16) | Manual OCI Console | Sem IaC, sem rastreabilidade | +| `api-gateway-nexus-dev` | Manual OCI Console | Sem IaC | +| LB `Test_Crivo_Dev` | Manual OCI Console | Sem IaC | +| DRG-Invista-Shared | Manual OCI Console | Sem IaC | +| Buckets MFE (`mfe-*-dev`) | Criados pelas pipelines | OK para DEV | +| OCIR repositories | Auto-criados no push | OK | +| ArgoCD Applications | Criados pela pipeline de cada MS | OK, mas depende de ArgoCD funcionar | +| Cloudflare DNS | Manual/pipeline | Pendente | +| Variable Groups Azure DevOps | Manual | Parcialmente configurado | + +--- + +## Fluxo para o Ambiente Subir — Checklist + +### Pré-requisitos (uma vez) + +- [ ] **P4**: Corrigir URL Git no `argocd/application-dev.yaml` (5 min) +- [ ] **P1**: Fazer merge de `feature/cd-deploy-oci-oke` → `main` no repo `azure-pipelines-templates` +- [ ] **P1**: Atualizar ref nos 9 MSs de `feature/cd-deploy-oci-oke` → `main` +- [ ] **P2**: Corrigir ms-barramento: trigger `develop` → `devops`, default `aws` → `oci-argocd` +- [ ] **P3**: Verificar e completar Variable Group `oci-terraform`: + - `OKE_CLUSTER_OCID` = OCID do cluster `cls-dev-nexus` + - `OCIR_USERNAME` = `grbb7qzeuoag/` + - `OCIR_AUTH_TOKEN` = Auth Token do usuário OCI + - `ARGOCD_REPO_PAT` = PAT Azure DevOps (já pode existir) +- [ ] **P5**: Rever `oci-credentials.yaml` nos repos MS — remover credenciais hardcoded +- [ ] Verificar se ingress-nginx está rodando no `cls-dev-nexus` (namespace `ingress-nginx`) +- [ ] Verificar se ArgoCD está acessível após correção da URL + +### Deploy dos MSs (em ordem) + +``` +1. ms-auth-external → push na branch devops +2. ms-auth-sso → push na branch devops +3. ms-user → push na branch devops +4. ms-belt → push na branch devops +5. ms-person → push na branch devops +6. ms-poc → push na branch devops +7. ms-notify → push na branch devops +8. ms-parameters → push na branch devops +9. ms-barramento → após correção P2, push na branch devops +``` + +### Deploy dos MFEs (já funcional, mas sem DNS) + +``` +mfe-shell, mfe-auth, mfe-user, mfe-person, mfe-formalization, mfe-poc +→ push na branch devops de cada repo +→ build + upload para OCI Object Storage +``` + +**Bloqueio MFEs:** DNS Cloudflare + VCN peering pendentes (usuário acessa via URL direta do API Gateway por enquanto). + +--- + +## O que cada MS precisa para funcionar completamente + +| Dependência | Responsável | Status | +|-------------|-------------|--------| +| OKE cluster disponível | Terraform | ✅ | +| ArgoCD instalado | Terraform | ✅ (mas URL quebrada) | +| OCIR registry acessível | OCI (auto) | ✅ | +| ingress-nginx rodando | ArgoCD/pipeline | ❓ verificar | +| `oci-terraform` VG completo | Azure DevOps admin | ❓ verificar | +| Per-MS Variable Group (`ms-{name}-dev`) | Azure DevOps admin | ❓ verificar | +| `argocd-repo-secret` no cluster | Pipeline (auto) | ✅ (cria no deploy) | +| DNS Cloudflare `ms-{name}.dev.invista.com.br` | Pipeline (auto) | ❓ CLOUDFLARE_API_TOKEN | + +--- + +## Outros Repos Relevantes + +| Repo | Tipo | Observação | +|------|------|-----------| +| `nats-k8s-config` | Mensageria | Configuração NATS para K8s — usado por MSs de eventos | +| `o11y-*` (5 repos) | Observabilidade | Prometheus, Grafana, Jaeger, Victoria Metrics/Logs — cluster observabilidade | +| `database` | DB migrations | Migrations SQL — deve rodar antes dos MSs | +| `InvistaFIDC.Lib.*` | Bibliotecas .NET | Publicadas no Azure Artifacts, consumidas pelos MSs | +| `azure-pipelines-templates` | Templates CI/CD | Branch `feature/cd-deploy-oci-oke` é o problema central | + +--- + +## Ação Imediata Recomendada (por prioridade) + +``` +1. [5 min] Corrigir ArgoCD URL no application-dev.yaml (tf_oci_clusters) +2. [30 min] Verificar/completar Variable Group oci-terraform +3. [30 min] Merge feature/cd-deploy-oci-oke → main no azure-pipelines-templates +4. [30 min] Atualizar ref nos 9 MSs para main (ou criar PR) +5. [5 min] Corrigir ms-barramento trigger + default +6. [1h] Verificar se ingress-nginx e ArgoCD estão healthy no cls-dev-nexus +7. [Deploy] Push devops em cada MS, em ordem, monitorando o ArgoCD +``` + +--- + +*Atualizado em: 2026-03-01 — Análise baseada em leitura direta dos repos Azure DevOps (branch devops)*