feat(Jenkinsfile.sco): add new pipeline for client deployment with parameter validation
This commit is contained in:
@@ -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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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()}'"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user