centrica-pipeline-shared)Versión: 1.0.0
Fecha: 2 de Junio, 2026
Estado: NORMATIVO - CI/CD
Arquitecto: Carlos Alberto Torres Camargo
centrica-pipeline-shared es la Jenkins Shared Library que centraliza la lógica
común de CI/CD de los 22+ repos backend (microservicios Spring Boot + libraries Maven).
Cada repo solo necesita un Jenkinsfile de ~10 líneas; el comportamiento (build, Sonar,
Docker, deploy por ambiente) vive en la librería.
gitlab.centricasoluciones.com/architecture/centrica-pipeline-sharedmicroservicePipeline() (servicios) y libraryPipeline() (libraries Maven)Híbrido tags SemVer + main rolling (decisión 2026-05-07):
| Ambiente | Versión de la librería |
|---|---|
DEV (develop, pre, feature/*) |
centrica-pipeline@main (rolling, últimas mejoras) |
QA (qa) |
centrica-pipeline@v<semver> (tag inmutable) |
PROD (main) |
centrica-pipeline@v<semver> (tag inmutable) |
Bump según el cambio: patch (fix interno), minor (parámetro opcional retrocompatible),
major (breaking change en la firma de microservicePipeline() / libraryPipeline()).
Como DEV usa
@main(rolling), todo merge amainde la librería es inmediato para
los pipelines DEV. Cambios de la librería se revisan vía Merge Request antes demain.
Manage Jenkins → System → Global Pipeline Libraries → Add:
Name: centrica-pipeline
Default version: main
Retrieval: Modern SCM → Git
Project Repo: https://gitlab.centricasoluciones.com/architecture/centrica-pipeline-shared.git
Credentials: gitlab-token
Jenkinsfile en la raíz del repo del servicio:
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-accounting-core',
imagePath : 'nebula/business-domains/finance/nebula-accounting-core',
composeDir : 'nebula/business-domains/finance'
)
Parámetros de microservicePipeline:
| Parámetro | Tipo | Default | Descripción |
|---|---|---|---|
serviceName |
String | requerido | Nombre del container y servicio en compose |
imagePath |
String | requerido | Path en registry sin tag |
composeDir |
String | requerido | Path relativo a ~/docker/compose en el nodo target |
sonar |
Boolean | true |
Análisis Sonar + quality gate |
deploy |
Boolean | true |
false cuando no hay código de negocio aún |
branchEnvMap |
Map | ['develop':'dev','qa':'qa','main':'prod','pre':'dev'] |
Mapping rama → ambiente |
jdkVersion |
String | JDK-25 |
Tool name en Jenkins |
mavenVersion |
String | Maven-3.9 |
Tool name en Jenkins |
Stages: Checkout → Build → Sonar (opt) → QualityGate (opt) → Docker Build/Push → Deploy (opt) → Tag.
Mapping rama → ambiente:
| Rama | Ambiente | Acción de deploy |
|---|---|---|
develop |
dev | Recrea el contenedor canónico (nodo-01) |
pre |
dev | Despliega contenedor paralelo <servicio>-pre sin tocar el canónico (solo nebula-*). Ver Lane -pre (DEV) |
qa |
qa | Deploy QA (nodo-02, auto) |
main |
prod | Deploy PROD (nodo-03, gate manual) |
| otra | — | Solo build, sin deploy |
def libVersion = (env.BRANCH_NAME == 'develop') ? 'main' : 'v1.0.0'
library identifier: "centrica-pipeline@${libVersion}"
libraryPipeline(
artifactId : 'nebula-models',
nexusRepo : 'centrica'
)
| Parámetro | Tipo | Default | Descripción |
|---|---|---|---|
artifactId |
String | requerido | artifactId del POM |
nexusRepo |
String | centrica |
Profile Maven que publica a Nexus |
sonar |
Boolean | true |
Análisis Sonar + quality gate |
jdkVersion |
String | JDK-25 |
|
mavenVersion |
String | Maven-3.9 |
Definidos en src/com/centrica/pipeline/EnvConfig.groovy:
| Ambiente | Nodo | Puerto SSH | Credencial | Red Docker | Auto-approve |
|---|---|---|---|---|---|
| dev | nodo-01 | 2202 | nodo01-ssh-key |
dev-network |
sí |
| qa | nodo-02 | 2203 | nodo02-ssh-key |
qa-network |
sí |
| prod | nodo-03 | 2204 | nodo03-ssh-key |
prod-network |
no (gate manual) |
Registry interno: 10.110.0.2:5000 (red interna del datacenter).
centrica-pipeline-shared/
├── vars/ ← entry points (DSL global)
│ ├── microservicePipeline.groovy
│ └── libraryPipeline.groovy
├── src/com/centrica/pipeline/ ← clases helper
│ ├── EnvConfig.groovy ← config por ambiente (nodo, red, credencial)
│ ├── DockerHelper.groovy ← build/tag/push al registry; tags por canal
│ ├── DeployHelper.groovy ← deploy canónico + deployPreLane (lane -pre)
│ ├── SonarHelper.groovy ← análisis + quality gate
│ └── Notifier.groovy ← notificaciones success/failure
└── examples/ ← Jenkinsfile de referencia
-preLa rama pre (branchEnvMap['pre']='dev') invoca DeployHelper.deployPreLane(), que
levanta un contenedor paralelo <servicio>-pre sin tocar el canónico. Aplica solo a
servicios nebula-*. El mecanismo completo (config, ruteo, infra, promoción) está en
Lane -pre (DEV).
pythonServicePipeline(), angularNxPipeline(), libraryPipelineNpm() (integración Vault)-pre — despliegue paralelo en DEV por rama premain| Version | Fecha | Autor | Descripcion |
|---|---|---|---|
| 1.0.0 | 2026-06-02 | Carlos Torres | Creación del documento. Referencia canónica de centrica-pipeline-shared: versionado, setup, entry points, ambientes, estructura y lane -pre. |