infracloud/invista/nexus/OCI-MFE-PADRONIZACAO.md

5.7 KiB

Padronização OCI para todos os MFEs

Concluído em: 2026-02-25


Contexto

O mfe-user tinha uma pipeline OCI funcional na branch devops que fazia Build → Upload para OCI Object Storage. O API Gateway (api-gateway-mfe-dev, IP 10.110.198.250) já estava provisionado via Terraform, mas só servia o mfe-user. Os demais MFEs (mfe-shell, mfe-auth, mfe-person, mfe-formalization, mfe-poc) não tinham pipeline OCI nem estavam no Terraform.

Objetivo concluído: Replicar o padrão em todos os MFEs, mantendo lógica DRY via template compartilhado.


O Que Foi Feito

1. Template OCI Compartilhado

Repositório: azure-pipelines-templates Arquivo: /mfe/deploy-mfe-oci.yaml (branch main) Commit: feat: add OCI deploy template for MFEs (deploy-mfe-oci.yaml)

Template reutilizável com dois parâmetros:

  • mfeName (string) — ex: mfe-shell, mfe-auth
  • buildCommand (string, default: npm run build:dev)

Stages:

  1. Build: npm ci + $(buildCommand) → publica artefato dist
  2. UploadToOCI: instala OCI CLI, configura ~/.oci/config, cria bucket se não existir, seta public-access-type=ObjectReadWithoutList, faz upload com content-type por extensão

Variable Group usado: oci-terraform Variáveis: OCI_PRIVATE_KEY_B64, OCI_USER_OCID, OCI_FINGERPRINT, OCI_TENANCY_OCID, OCI_REGION, TF_VAR_compartment_parent_ocid

Bucket name pattern: mfe-$(mfeName)-dev Dist path: $(Pipeline.Workspace)/dist/$(mfeName)/browser/


2. Pipelines dos MFEs (branch devops)

Cada MFE tem agora um azure-pipelines.yml na branch devops com trigger para essa branch:

trigger:
  branches:
    include:
      - devops

resources:
  repositories:
    - repository: templates
      type: git
      name: azure-pipelines-templates

extends:
  template: mfe/deploy-mfe-oci.yaml@templates
  parameters:
    mfeName: '<nome-do-mfe>'
Repo Arquivo Ação Commit
mfe-user /azure-pipelines.yml (branch devops) Atualizado: de inline → template OCI feat: migrate CI/CD to OCI...
mfe-shell /azure-pipelines.yml (branch devops) Atualizado: de AWS template → OCI template feat: migrate CI/CD to OCI...
mfe-auth /azure-pipelines.yml (branch devops) Atualizado: de AWS template → OCI template feat: migrate CI/CD to OCI...
mfe-person /azure-pipelines.yml (branch devops) Atualizado: de AWS template → OCI template feat: migrate CI/CD to OCI...
mfe-formalization /azure-pipelines.yml (branch devops) Criado novo feat: migrate CI/CD to OCI...
mfe-poc /azure-pipelines.yml (branch devops) Criado novo feat: migrate CI/CD to OCI...

3. Terraform — API Gateway MFE

Repositório: tf_oci_clusters Arquivo: /environments/dev/api_gateway_mfe.tf (branch main) Commit: feat(dev): add all 6 MFEs to api_gateway_mfe deployments

O array mfe_deployments foi atualizado de 1 para 6 entradas:

MFE Hostname Bucket
mfe-user mfe-user-dev.invista.com.br mfe-user-dev
mfe-shell mfe-shell-dev.invista.com.br mfe-shell-dev
mfe-auth mfe-auth-dev.invista.com.br mfe-auth-dev
mfe-person mfe-person-dev.invista.com.br mfe-person-dev
mfe-formalization mfe-formalization-dev.invista.com.br mfe-formalization-dev
mfe-poc mfe-poc-dev.invista.com.br mfe-poc-dev

Como Funciona

Fluxo de Deploy

Push para branch devops em qualquer MFE repo
  ↓
azure-pipelines.yml trigga
  ↓
Extends deploy-mfe-oci.yaml@templates
  ↓
Stage: Build
  npm ci + npm run build:dev
  Publica artefato 'dist'
  ↓
Stage: UploadToOCI
  Instala OCI CLI
  Configura ~/.oci/config (via oci-terraform variable group)
  Cria bucket mfe-<nome>-dev (se não existir)
  Seta public-access-type=ObjectReadWithoutList
  Upload de todos arquivos com content-type correto

Acesso após Terraform Apply

O Terraform cria um deployment por MFE no API Gateway api-gateway-mfe-dev.

URL base do gateway: https://guhal72tzyekzchzamhhi3lvgi.apigateway.sa-saopaulo-1.oci.customer-oci.com/

Cada MFE fica acessível em:

  • mfe-user-dev.invista.com.br → Object Storage mfe-user-dev
  • mfe-shell-dev.invista.com.br → Object Storage mfe-shell-dev
  • etc.

Notas Importantes

  • A branch devops do mfe-user (pipeline multi-cloud inline) é mantida como está — o azure-pipelines.yml atualizado convive com o inline existente porque substituiu o arquivo existente com o novo template
  • mfe-formalization e mfe-poc não tinham pipeline algum — o novo arquivo OCI é o primeiro
  • Os buckets mfe-{name}-dev são criados automaticamente pela pipeline se não existirem
  • Após terraform apply o API Gateway cria um deployment por MFE no mesmo gateway (rota por hostname)

Verificação

Pipeline

Após push para branch devops em qualquer MFE:

  1. Azure DevOps detecta trigger na branch devops
  2. Executa Build stage (npm ci + build:dev)
  3. Executa UploadToOCI stage (cria bucket + faz upload)
  4. Bucket mfe-<nome>-dev disponível no OCI Object Storage

Terraform

Após terraform apply no ambiente dev:

  1. API Gateway cria um deployment por MFE no mfe_deployments list
  2. Cada deployment tem rotas:
    • GET /index.html (SPA entry point)
    • GET /{path*} → arquivos estáticos do bucket

Referências