Obtener O trabajar correctamente en Jenkins Pipeline
Estoy tratando de desactivar ciertos nombres para ser usados en un oleoducto.
simplemente poner: "Si es nombre1 o NOMBRE1, ignorar - de lo contrario, proceder"
Pero aparentemente no funciona correctamente. (todavía estampas hola, según el ejemplo)
Funciona si pongo "params.project != 'name1' || params.project != 'name1' "
Lo cual no entiendo por qué.
¿Qué estoy perdiendo aquí?
pipeline {
agent { label 'master'}
parameters {
string(defaultValue: '', description: '', name: 'project')
}
stages {
stage ('project stage') {
steps {
script {
if (params.project != 'name1' || params.project != 'NAME1')
println "Hello"
}
}
}
}
}
No es duplicado de Esto ya que intento entender la lógica detrás de este comportamiento.
Al final fui con
if (params.project!= 'name') {
if (params.project!= 'NAME1') {
}
}
Pero creo que hay una mejor manera que eso ..
Actualización:
Encontré otra manera, que es usar contains
if (project.contains('name'))
Pregunta hecha hace 3 años, 4 meses, 28 días - Por codecrusaderx58e2
3 Respuestas:
-
Si su objetivo es eliminar ambos valores de ser usado para el
project
parámetro, entonces usted necesita el&&
operador lógico ("y"):if (params.project != 'name1' && params.project != 'NAME1')
Esto evitará tanto los valores para el parámetro como se desee.
Alternativamente, también podría utilizar una expresión regular similar a la siguiente:
if !(params.project ==~ /name1|NAME1/) // =~ if instead do not want to additionally require type match
Respondida el Dec 17, 2020 a las 15:18 - por apiartisan
Votos positivos: 0 | Votos negativos: 0 -
El problema que estás experimentando en tu código de Jenkins Pipeline se debe a una confusión en la lógica condicional. En tu código original, la condición que estás usando es la siguiente:
groovy if (params.project != 'name1' || params.project != 'NAME1') println "Hello"
El problema con esta condición es que estás utilizando el operador lógico OR (
||
) en lugar de utilizar el operador lógico AND (&&
). Cuando tienes dos condiciones unidas por un OR, la condición se evaluará como verdadera si al menos una de las condiciones es verdadera. En tu caso, dado queparams.project
siempre será diferente a uno de los dos valores ('name1' o 'NAME1'), la condición siempre será verdadera y se imprimirá "Hello".La forma correcta de abordar este problema es utilizando el operador AND (
&&
), para que la condición se cumpla solamente siparams.project
no es igual a 'name1' y a la vez no es igual a 'NAME1'. De esta manera, se imprimirá "Hello" solo cuandoparams.project
no sea ninguno de esos dos valores.Aquí está la corrección en tu código:
groovy if (params.project != 'name1' && params.project != 'NAME1') { println "Hello" }
Con esta corrección, la condición se evaluará correctamente y solo se imprimirá "Hello" si
params.project
no es ni 'name1' ni 'NAME1'.Espero que esta explicación te haya sido de ayuda. ¡Déjame saber si necesitas más información o asistencia!
Respondida el Dec 18, 2020 a las 15:19 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
La condición
if (params.project != 'name1' || params.project != 'NAME1')
no funciona como se espera porque el operador||
se utiliza para la disyunción lógica (OR), lo que significa que si cualquiera de las condiciones es verdadera, la condición general es verdadera.En este caso, ambas condiciones son verdaderas (ya que
params.project
es diferente de"name1"
y"NAME1"
), por lo que la condición general siempre es verdadera y el bloquescript
siempre se ejecuta.Para lograr el comportamiento deseado, debes utilizar el operador
&&
(AND) en su lugar, lo que significa que ambas condiciones deben ser verdaderas para que la condición general sea verdadera.Aquí hay un código corregido:
if (params.project != 'name1' && params.project != 'NAME1')
Este código verificará si
params.project
es diferente de"name1"
y"NAME1"
, y solo ejecutará el bloquescript
si ambas condiciones son verdaderas.El uso de
contains
también es una solución válida, pero puede ser menos eficiente que comparar directamente las cadenas.Respondida el Dec 18, 2020 a las 15:29 - por Gemini
Votos positivos: 0 | Votos negativos: 0