Estado: NORMATIVO
Referencias de código: backend/nebula-masters/Jenkinsfile
Este documento define la entrega (Gitflow + PR) y el deploy (Jenkins + registry
Prerrequisito de datos: como Flyway NO corre, las migraciones DDL (Oracle)
e i18n (Postgres) deben estar aplicadas manualmente ANTES del deploy. Ver
06_DATOS_DDL_I18N.md.
Para el detalle completo del SDLC, este documento referencia (no duplica):
centrica-pipeline-shared.| Paso | Acción |
|---|---|
| 1 | Crear rama feature/<id-ht>-<slug> desde develop. |
| 2 | Commit(s) con mensaje convencional. NUNCA incluir Co-Authored-By en el mensaje. |
| 3 | git push de la rama feature. |
| 4 | Abrir PR/MR feature/* → develop. |
| 5 | Code review (gatekeeper) → merge a develop. |
El detalle de promociones
develop → qa → main(con tags SemVer inmutables)
está en GITFLOW_DETALLADO.md y
FLUJO_HT_A_PROD.md.
Jenkinsfile canónicoCada servicio trae un Jenkinsfile de ~10 líneas que delega todo en la shared
library centrica-pipeline. El comportamiento (build, test, imagen, push,
deploy) vive en la librería, no en el repo.
backend/nebula-masters/Jenkinsfile (real, verbatim):
// =================================================================
// Jenkinsfile — nebula-masters
// Pipeline CI/CD basado en centrica-pipeline-shared
//
// Hibrido de versionado de library:
// develop, feature/*, hotfix/* -> main (rolling, ultimas mejoras)
// qa, main -> tag semver inmutable (reproducible)
// =================================================================
def STABLE_LIB_VERSION = 'v1.0.4'
def libVersion = (env.BRANCH_NAME in ['qa', 'main']) ? STABLE_LIB_VERSION : 'main'
library identifier: "centrica-pipeline@${libVersion}"
microservicePipeline(
serviceName : 'nebula-masters',
imagePath : 'nebula/cross-cutting/nebula-masters',
composeDir : 'nebula/cross-cutting'
)
Parámetros de microservicePipeline():
| Parámetro | Significado |
|---|---|
serviceName |
Nombre del servicio (artefacto / contenedor). |
imagePath |
Path de la imagen en el registry, sin tag (ej. nebula/cross-cutting/nebula-masters). |
composeDir |
Path relativo a ~/docker/compose en el nodo target. |
Versionado de la librería (híbrido): develop/feature/*/hotfix/* usan
centrica-pipeline@main (rolling); qa/main fijan el tag inmutable
(STABLE_LIB_VERSION = 'v1.0.4'). Detalle en
LIBRERIA_PIPELINE_SHARED.md.
Etapas conceptuales (dentro de la shared library):
10.110.0.2:5000 (nodo-00, red interna del datacenter).:latest-dev.Recordatorio: las migraciones de 06_DATOS_DDL_I18N.md
deben estar aplicadas en Oracle/Postgres del nodo ANTES de que el contenedor
arranque; el servicio no migra por sí mismo.
curl -s http://<host-gateway>:<port>/actuator/health
# esperado: {"status":"UP"} (HTTP 200)
Header de ambiente x-simappe-environment: dev. El token llega por el header
accesstoken (~6 min de vida).
# Paso 1: login
TOKEN=$(curl -s -X POST http://<host>/login \
-H "Content-Type: application/json" \
-H "x-simappe-environment: dev" \
-d '{"username":"dev@nebula","password":"Catcsoft@Simappe"}' \
-D - | grep -i '^accesstoken:' | awk '{print $2}' | tr -d '\r')
# Paso 2: seleccionar compañía (companyId=5)
TOKEN=$(curl -s -X POST "http://<host>/jwt-select-company?companyId=5" \
-H "x-simappe-environment: dev" \
-H "accesstoken: ${TOKEN}" \
-D - | grep -i '^accesstoken:' | awk '{print $2}' | tr -d '\r')
# index (catálogo de campos / metadata)
curl -s "http://<host>/<modulo>/<recurso>/index" \
-H "x-simappe-environment: dev" -H "accesstoken: ${TOKEN}"
# get-record (detalle por id, leído de la vista plana v_<entidad>)
curl -s "http://<host>/<modulo>/<recurso>/get-record/1000" \
-H "x-simappe-environment: dev" -H "accesstoken: ${TOKEN}"
# page-response (listado paginado sobre la vista plana)
curl -s -X POST "http://<host>/<modulo>/<recurso>/page-response" \
-H "Content-Type: application/json" \
-H "x-simappe-environment: dev" -H "accesstoken: ${TOKEN}" \
-d '{"page":0,"size":20}'
Criterio de smoke OK: health 200, login devuelve token en ambos pasos, y
get-record / page-response responden con el envelope estándar y datos de la
vista (v_embargos / v_consecutivo_def).