feat(Jenkinsfile.sco): add new pipeline for client deployment with parameter validation

This commit is contained in:
aagusfernandez02
2026-07-20 09:51:28 -03:00
parent 1d7e14bb74
commit 8ee3824dd7
3 changed files with 70 additions and 111 deletions
-55
View File
@@ -1,55 +0,0 @@
pipeline {
agent none
parameters {
choice(
name: 'TIENDA',
choices: ['oficina'],
description: 'Tienda destino'
)
string(
name: 'NODO',
defaultValue: '',
description: 'Nombre exacto del nodo a deployar (vacío = toda la tienda)'
)
}
stages {
stage('Preparar scripts') {
agent { label 'built-in' }
steps {
sh 'cp /opt/deploy/install.sh .'
stash name: 'scripts', includes: 'install.sh'
}
}
stage('Deploy') {
agent { label 'built-in' }
steps {
script {
def labelExpr = "lab && ${params.TIENDA}"
def nodes = nodesByLabel(label: labelExpr, offline: false)
if (params.NODO?.trim()) {
def target = params.NODO.trim()
if (!nodes.contains(target)) {
error "El nodo '${target}' no está online o no pertenece al label: ${labelExpr}"
}
nodes = [target]
}
if (nodes.isEmpty()) {
error "No hay nodos online con el label: ${labelExpr}"
}
def deployStages = nodes.collectEntries { nodeName ->
["Deploy ${nodeName}": {
node(nodeName) {
unstash 'scripts'
sh "bash install.sh 'lab'"
}
}]
}
parallel deployStages
}
}
}
}
}
-56
View File
@@ -1,56 +0,0 @@
pipeline {
agent none
parameters {
choice(
name: 'TIENDA',
choices: ['yabucoa', 'san-lorenzo', 'rio-grande'],
description: 'Tienda destino'
)
string(
name: 'NODO',
defaultValue: '',
description: 'Nombre exacto del nodo a deployar (vacío = toda la tienda)'
)
}
stages {
stage('Preparar scripts') {
agent { label 'built-in' }
steps {
sh 'cp /opt/deploy/install.sh .'
stash name: 'scripts', includes: 'install.sh'
}
}
stage('Deploy') {
agent { label 'built-in' }
steps {
script {
def labelExpr = "ralph && ${params.TIENDA}"
def nodes = nodesByLabel(label: labelExpr, offline: false)
if (params.NODO?.trim()) {
def target = params.NODO.trim()
if (!nodes.contains(target)) {
error "El nodo '${target}' no está online o no pertenece al label: ${labelExpr}"
}
nodes = [target]
}
if (nodes.isEmpty()) {
error "No hay nodos online con el label: ${labelExpr}"
}
def deployStages = nodes.collectEntries { nodeName ->
["Deploy ${nodeName}": {
node(nodeName) {
unstash 'scripts'
sh "bash install.sh 'mbs-ralphs'"
sh 'cat ~/sco-app/installed.txt'
}
}]
}
parallel deployStages
}
}
}
}
}
+70
View File
@@ -0,0 +1,70 @@
pipeline {
agent none
parameters {
string(
name: 'NODO',
defaultValue: '',
description: 'Nombre exacto del nodo a deployar'
)
choice(
name: 'CLIENTE',
choices: [
'SELECCIONAR_CLIENTE',
'cencosud-jumbo',
'censosud-staisabel',
'changomas-hiper',
'changomas-super',
'dibal',
'hisense',
'lsco',
'mbs-econo',
'mbs-famcoop',
'mbs-ralphs',
'mbs-supermax',
'modatelas',
'walmart-chile-acuenta',
'walmart-chile-lider',
'wm-mexico-bodega',
'wm-mexico-walmart'
],
description: 'Cliente para el cual se ejecuta el deploy'
)
}
stages {
stage('Registro de parámetros') {
agent none
when { expression { params.CLIENTE == null } }
steps {
echo 'Primer build: Jenkins está registrando los parámetros de este Jenkinsfile. No se ejecuta ningún deploy. Volvé a correr el job con "Build with Parameters".'
script { currentBuild.result = 'NOT_BUILT' }
}
}
stage('Preparar scripts') {
agent { label 'built-in' }
when { expression { params.CLIENTE != null } }
steps {
sh 'cp /opt/deploy/install.sh .'
stash name: 'scripts', includes: 'install.sh'
}
}
stage('Deploy') {
agent { label 'built-in' }
when { expression { params.CLIENTE != null } }
steps {
script {
if (!params.NODO?.trim()) {
error "El parámetro NODO es obligatorio"
}
if (params.CLIENTE == 'SELECCIONAR_CLIENTE') {
error "El parámetro CLIENTE es obligatorio"
}
def target = params.NODO.trim()
node(target) {
unstash 'scripts'
sh "bash install.sh '${params.CLIENTE.trim()}'"
}
}
}
}
}
}