# Análise de Pipelines — MFEs e Microserviços

> **Data:** 2026-03-01 | **Atualizado:** 2026-03-03 | **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` ✅ | `main` ✅ | nexus-services | cls-dev-nexus |
| ms-auth-sso | `devops` ✅ | `oci-argocd` ✅ | `main` ✅ | nexus-services | cls-dev-nexus |
| ms-barramento | `devops` ✅ | `oci-argocd` ✅ | `main` ✅ | integration-hub | cls-dev-nexus |
| ms-belt | `devops` ✅ | `oci-argocd` ✅ | `main` ✅ | nexus-services | cls-dev-nexus |
| ms-notify | `devops` ✅ | `oci-argocd` ✅ | `main` ✅ | nexus-services | cls-dev-nexus |
| ms-parameters | `devops` ✅ | `oci-argocd` ✅ | `main` ✅ | nexus-services | cls-dev-nexus |
| ms-person | `devops` ✅ | `oci-argocd` ✅ | `main` ✅ | nexus-services | cls-dev-nexus |
| ms-poc | `devops` ✅ | `oci-argocd` ✅ | `main` ✅ | nexus-services | cls-dev-nexus |
| ms-user | `devops` ✅ | `oci-argocd` ✅ | `main` ✅ | 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`)~~ ✅ RESOLVIDO 2026-03-01

**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~~ ✅ RESOLVIDO 2026-03-01

```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~~ ✅ RESOLVIDO 2026-03-01

**Análise realizada em 2026-03-01:** O VG estava completo. Os templates têm fallback automático para a maioria das variáveis listadas. Ações realizadas:

- `OKE_CLUSTER_OCID` — **não necessária**: script lê de `config/oke-clusters.json` no repo templates
- `OCIR_REGISTRY`, `OCIR_NAMESPACE`, `OCIR_USERNAME` — **não necessárias**: auto-resolvidas via OCI CLI
- `ARGOCD_REPO_URL` — **não necessária**: auto-resolvida via `BUILD_REPOSITORY_URI`
- `OCIR_REPOSITORY_NAME = ms-auth-external` — **removida do VG** (sobrescrevia o nome correto de cada MS)
- VG `ms-parameters-dev` — **criado** (ID: 40, era o único VG per-MS ausente)

---

### ~~🔴 P4 — ArgoCD com URL Git quebrada~~ ✅ RESOLVIDO 2026-03-01

`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.

---

### ~~🔴 P6 — Pipeline Terraform falhando desde 2026-02-25: provider hashicorp/oci~~ ✅ RESOLVIDO 2026-03-03

**Sintoma:** `terraform init` falhava com `did not find a proper configuration for private key with provider["registry.terraform.io/hashicorp/oci"]`

**Causa:** `modules/iam_domain/` sem `versions.tf` → Terraform resolvia `oci` para `hashicorp/oci` (legado) em vez de `oracle/oci`.

**Fix:** Criado `modules/iam_domain/versions.tf` com `source = "oracle/oci"`. Commit `fix(iam_domain): adiciona versions.tf com oracle/oci como provider`

---

### ~~🔴 P7 — ssh_public_key_path incorreto em HML e PROD~~ ✅ RESOLVIDO 2026-03-03

**Sintoma:** HML e PROD Plans falhavam: `no file exists at "../../config/ci_ssh_key.pub"`

**Fix:** Corrigido para `../../config/ssh/ci_ssh_key.pub` em `hml/terraform.ci.tfvars` e `prod/terraform.ci.tfvars`. Commit `fix(ci): corrige caminho ssh_public_key_path em hml e prod`

---

## 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 PUBLIC `api-gateway-dev` (em `cmp-dev-nexus`, subnet `sbn-lb-1`) | ✅ Terraform |
| 6 buckets MFE `mfe-*-dev` (em `cmp-dev-nexus`) | ✅ Terraform |
| Subnet `sbn-api-gateway` (10.110.192.0/20) — disponível, não usada | ✅ 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)

- [x] **P4**: Corrigir URL Git no `argocd/application-dev.yaml` ✅ commit `6081eda`
- [x] **P1**: Fazer merge de `feature/cd-deploy-oci-oke` → `main` no repo `azure-pipelines-templates` ✅ PR #2135 (squash, 2026-03-01)
- [x] **P1**: Atualizar ref nos 9 MSs de `feature/cd-deploy-oci-oke` → `main` ✅ (commits aplicados via API em 2026-03-01)
- [x] **P2**: Corrigir ms-barramento: trigger `develop` → `devops`, default `aws` → `oci-argocd` ✅ commit `0100d91`
- [x] **P3**: Variable Group `oci-terraform` verificado e corrigido ✅ (2026-03-01)
  - VG estava completo; removido `OCIR_REPOSITORY_NAME` global; criado `ms-parameters-dev` (ID: 40)
- [ ] **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)*
