164 lines
5.7 KiB
Markdown
164 lines
5.7 KiB
Markdown
# 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:
|
|
|
|
```yaml
|
|
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
|
|
|
|
- [OCI-MFE-TASKS.md](./OCI-MFE-TASKS.md) — Checklist completo
|
|
- [OCI-MFE-STEPBYSTEP.md](./OCI-MFE-STEPBYSTEP.md) — Guia passo a passo
|
|
- [OCI-TERRAFORM.md](./OCI-TERRAFORM.md) — Terraform configuração
|
|
- Template: `azure-pipelines-templates/mfe/deploy-mfe-oci.yaml`
|
|
- Terraform: `tf_oci_clusters/environments/dev/api_gateway_mfe.tf`
|