Publicação
Quando usar: quando o pacote está assinado e as imagens estão no registry. Daqui para frente, tudo é operação pela ferramenta do módulo contra a Public API — e depende de um principal de plataforma com as permissões de release.
Permissões necessárias: modules.release.upload, modules.release.deploy,
modules.release.rollback, modules.module.disable, modules.module.read (papel
nnc:modules:release-manager).
export NN_API_URL=https://api.nnumbers.com.br
1. Upload
./nnconsolew modules upload dist/sample-0.1.0.signed.nnp --api "$NN_API_URL"
O upload valida o pacote de novo (agora contra o ambiente: imagem existe no registry? rede
declarada casa com o catálogo do destino? slots de segredo declarados?), provisiona o que a release
precisa e deixa a release em VALIDATED. A Idempotency-Key é gerada e impressa no stderr: repetir
com a mesma chave é seguro.
Imagem ausente no registry: image_not_found. Pacote sem assinatura válida para o ambiente:
release_invalid — a política de assinatura é do ambiente, não do módulo.
2. Ler o Report
./nnconsolew modules show sample sample@0.1.0
./nnconsolew modules show sample sample@0.1.0 --json > dist/sample-0.1.0-report.json
O Report do MM usa passed|failed|warning|skipped (o nnp verify local usa pass|warn|fail). Além
dos checks do pacote, o ambiente acrescenta os dele: network_contract, sbom, docs_build,
help_topics.
3. Plano de deploy
./nnconsolew modules plan sample sample@0.1.0 # sai ≠ 0 se não estiver READY
./nnconsolew modules plan sample sample@0.1.0 --json > dist/sample-0.1.0-plan.json
Cada recurso aparece com will_create ou exists_ok (namespace, banco, principais, segredos,
Secrets, label de grant). BLOCKED traz code, recurso, dono (owner) e o que fazer
(remediation) — quase sempre é do dono indicado, não do autor do módulo. Não faça Deploy com o plano
BLOCKED.
4. Deploy
./nnconsolew modules deploy sample sample@0.1.0 --api "$NN_API_URL"
O comando acompanha a operação até o fim (timeout padrão 30 min; --no-wait devolve o aceite e o id
da operação). O Deploy faz, numa operação só: first install (namespace, banco, principais, segredos,
grants quando é a primeira vez), migrations, stage completo e ativação.
As fases aparecem no last_operation e no progresso:
PREFLIGHT → PROVISIONING → MIGRATING → DEPLOYING → REGISTERING → ACTIVATING → ACTIVE
Falha com checkpoint vira FAILED_RECONCILABLE: repetir o mesmo Deploy retoma de onde parou, sem
criar nada duas vezes. Se preferir acompanhar por fora:
./nnconsolew modules wait <action-id> --api "$NN_API_URL"
Prova de sucesso: a operação termina succeeded e o modules show mostra os checks de ambiente
passed (network_conformance, status_registration, status_probe_ready, status_first_observation,
docs_build, help_topics — os que o módulo declara).
5. Atualizar (N+1)
Upgrade é o mesmo caminho, com a versão nova:
# 1. versão nova nos descritores, no POM e no chart (juntos)
# 2. gate local verde
./mvnw -q verify
# 3. imagem e pacote da versão nova
./mvnw spring-boot:build-image && ./nnconsolew nnp build
# 4. assinatura (operador) e o mesmo Upload → Deploy
./nnconsolew modules upload dist/sample-0.1.1.signed.nnp --api "$NN_API_URL"
./nnconsolew modules deploy sample sample@0.1.1 --api "$NN_API_URL"
Durante o Deploy convivem a release N (ativa) e a N+1 (standby): as duas servem tráfego, e só a ativa faz o trabalho de manutenção (veja Papel). O schema é expand-only, então a N continua funcionando com o banco novo (veja Migration).
6. Voltar atrás
./nnconsolew modules rollback sample --to sample@0.1.0 --api "$NN_API_URL"
O rollback ativa uma release anterior já validada (N-1). Ele não desfaz migration: o schema
continua o novo, e a release antiga roda sobre ele — é exatamente o que o expand-only garante. Rollback
que importa é Java N → Java N-1, dentro da mesma linha do SDK; o piso de upload é declarado em
compatibility.sdk.
7. Tirar do ar e aposentar
./nnconsolew modules disable sample --api "$NN_API_URL" # para de servir; o dado fica
./nnconsolew modules enable sample --api "$NN_API_URL" # volta
./nnconsolew modules retire sample --api "$NN_API_URL" # aposenta a release/ módulo
disable é a parada controlada: as rotas do módulo respondem 503 service_disabled, o namespace e o
banco continuam existindo, e o enable recupera o serviço sem novo deploy. retire é o fim: não há
uninstall de módulo — a remoção de dado e de credencial é procedimento do operador, com o segredo do
cofre marcado como retired.
Erros comuns
- Subir pacote sem a imagem publicada —
image_not_found; publique a imagem do MESMO commit do pacote (o digest do pacote tem de ser o que está no registry). - Deploy com plano
BLOCKED— nada é provisionado e o bloqueio volta; siga aremediatione oownerdo plano. - Repetir um Deploy que falhou sem checkpoint — falha sem checkpoint significa que o estado não é retomável: leia o erro antes de repetir.
- Fazer rollback "para desfazer migration" — rollback não desfaz schema. Correção de schema é release nova, expand-only (veja Migration).
- Usar um principal de tenant — as permissões de release são
scope: platform: principal de realm de cliente não sobe release. - Deixar o
--no-waite não guardar o id — sem o id você não acompanha nem repete com rastreio; usemodules wait <action-id>. - Mudar a versão só no pacote — o serviço embute a versão do
release.yaml; versão divergente aparece no/whoamie no log e denuncia release mal montada. - Aposentar (
retire) para "limpar" — aposentadoria é irreversível pela ferramenta.
Was this page helpful?
Report a problem on this pageDo not send passwords, keys, tokens, or customer data.