Comece aqui
Um módulo é um produto que roda dentro da NNumbers Console: um serviço de backend (o NNS), escrito em Java 26 + Spring Boot 4.1 sobre o SDK da plataforma, mais os descritores que declaram o que ele precisa (rotas, permissões, trilhas de auditoria, placement, banco, configuração, documentação e ajuda contextual), um chart que a plataforma renderiza no Kubernetes e um Status Probe que responde "este produto está funcionando?". Tudo isso vira um pacote único — o NNP — que o Module Manager valida e implanta.
A Console é o lugar em que o módulo aparece para quem usa: cada rota vira uma chamada pelo gateway (com autenticação e permissão conferidas de novo pelo próprio NNS), cada mutação vira um evento de auditoria e cada operação demorada vira uma Action visível no Action Center. Você não cria namespace, banco, conta nem Secret: você declara o que o módulo precisa no próprio repositório e a plataforma provisiona no primeiro deploy, dentro do que foi autorizado.
O que você precisa na máquina
| o quê | por quê |
|---|---|
| Git | o módulo é um repositório; nnumbers-console-<id> |
| JDK 26 | o serviço compila e roda em Java 26 (java --version tem de mostrar a 26) |
| Um runtime de contêiner | ./mvnw spring-boot:build-image constrói a imagem OCI do serviço (Paketo) |
| MySQL 8.0.35 ou 8.4 (opcional, mas recomendado) | os testes de banco rodam contra MySQL real; sem ele, esses testes são pulados |
Nada além disso: o Maven Wrapper (./mvnw) e a ferramenta do desenvolvedor
(./nnconsolew) vêm dentro do projeto — você não instala Maven nem a
ferramenta. Os comandos usam git, java e ./mvnw/./nnconsolew, e só.
Para criar o PRIMEIRO módulo (quando ainda não existe um repositório com o
./nnconsolew), baixe o jar all do CLI — br.com.nnumbers.console:console-sdk-cli
(0.8.0-SNAPSHOT), no grupo
https://cicd.nnumbers.com.br/nexus/repository/maven-public/ (leitura sem
credencial; o grupo também espelha o Maven Central):
MAVEN=https://cicd.nnumbers.com.br/nexus/repository/maven-public
SDK=0.8.0-SNAPSHOT # a versão do SDK desta linha
value=$(curl -sS "$MAVEN/br/com/nnumbers/console/console-sdk-cli/$SDK/maven-metadata.xml" \
| awk '/<classifier>all<\/classifier>/{f=1} f && /<value>/{gsub(/.*<value>|<\/value>.*/,""); print; exit}')
curl -sS -o nnconsole-all.jar \
"$MAVEN/br/com/nnumbers/console/console-sdk-cli/$SDK/console-sdk-cli-$value-all.jar"
java -jar nnconsole-all.jar version
# sdk 0.8.0-SNAPSHOT (nnconsole/0.8.0-SNAPSHOT), contrato console.nnumbers.io/v1alpha3
(O caminho -SNAPSHOT do arquivo 404; por isso o value do <snapshotVersions>.)
Como as peças se encaixam
seu módulo (nnumbers-console-notes/)
┌──────────────────────────────────────────────────────────┐
│ src/… o NNS (Java 26 + Spring Boot) │
│ nnp/ os descritores (release, api, iam, │
│ audit, placement) │
│ nns/service.yaml, status/, docs/, help/, embed/ │
│ nns/helm/chart/ o chart do serviço │
│ tests/ as expectativas da conformance │
└───────────────┬──────────────────────────────────────────┘
│ ./mvnw verify (testes)
│ ./mvnw spring-boot:build-image (imagem)
│ ./nnconsolew nnp build (pacote .nnp)
▼
notes-0.1.0.nnp ──► Module Manager (upload + deploy)
│ valida, planeja, provisiona
├─ Kubernetes: namespace, Deployment,
│ Service, chart, Migration Job
└─ Console: rotas, permissões,
auditoria, Status, docs e help
- SDK da plataforma (
console-sdk-core,console-sdk-jdbc,console-sdk-spring, o starterconsole-sdk-spring-boot-starter): é o que o seu serviço usa para virar um NNS. As anotações e classes do SDK cuidam do protocolo (rotas por@NnsRoute, tokens e permissões, idempotência, ações assíncronas, auditoria, migrations,/livee/ready); você escreve o domínio. - Ferramenta do desenvolvedor (
nnconsole, usada no repositório pelo./nnconsolew): confere os descritores e as rotas, os scans de segredos e portabilidade, a conformance, e constrói o pacote (nnp build), assina (nnp sign), verifica (nnp verify) e conversa com o Module Manager (modules upload|plan|deploy|rollback|disable|enable|retire|wait). - Module Manager: recebe o NNP, valida (assinatura, checksums, SBOM, descritores, rede), planeja o que será criado e provisiona no deploy — namespace, banco, segredos, rotas no gateway, status, docs.
- Console: onde o produto aparece para quem usa; o shell carrega o módulo, o gateway autentica as chamadas e o serviço confere a permissão de novo.
O ciclo de vida em uma olhada
java -jar nnconsole-all.jar module create --dir nnumbers-console-notes --name "Notes" notes # 1. cria o módulo
cd nnumbers-console-notes # a partir daqui, tudo roda DENTRO do módulo
./mvnw -q verify # 2. testa
./mvnw spring-boot:build-image # 3. constrói a imagem do serviço
./nnconsolew nnp build --root . --out dist \
--java-image "$(cat nns/build/image.ref)" \
--probe-java-image "$(cat status/build/image.ref)" # 4. empacota o .nnp
./nnconsolew nnp verify dist/notes-0.1.0.nnp # 5. valida o pacote
./nnconsolew modules upload dist/notes-0.1.0.signed.nnp --api "$NN_API_URL" # 6. upload (operador)
./nnconsolew modules deploy notes notes@0.1.0 --api "$NN_API_URL" # 7. deploy (operador)
O passo 1 usa o jar baixado (a module create recusa as flags DEPOIS do id);
do passo 2 em diante tudo roda no repositório do módulo. O passo 4 lê as
imagens PUBLICADAS por digest (nns/build/image.ref): construí-las exige um
runtime de contêiner na sua máquina, publicá-las exige a credencial de
registry (a equipe da plataforma fornece num DOCKER_CONFIG) e a assinatura do pacote
(passo 6) é do operador, com a chave dele.
Os passos 6 e 7 são do operador, com a sua identidade de plataforma; o resto
é seu, no repositório do módulo. Nada é aplicado com kubectl ou helm à
mão: produção é só pelo Module Manager.
Para onde ir agora
- Crie seu primeiro módulo NNumbers em Java — do zero ao módulo instalado e visível na Console, passo a passo, com o comando exato e a saída esperada.
- O ciclo de vida de um módulo — o guia completo (repositório, domínio, descritores, provas locais, publicação, upgrade e rollback) para quem terminou o tutorial.
- As páginas de Referência (descritores, API do SDK, checklist e a referência da ferramenta) ficam ao lado deste produto no portal.
Was this page helpful?
Report a problem on this pageDo not send passwords, keys, tokens, or customer data.