Jenkins - Pasando parámetro a una función maravillosa
He estado intentando llamar a otra función maravillosa con parámetros dentro de mi canalización sin suerte.
La función maravillosa a la que le estoy pasando los parámetros consiste en un script bash, pero este script bash no reconoce los parámetros que le estoy pasando. Sin embargo, si el parámetro pasado por i lo definí como parameters {}
en la tubería, entonces funciona, pero no quiero esto.
PROBLEMA:
El script de shell no reconoce / comprende los argumentos, las variables están vacías, sin valor.
pipelineJenkins.groovy
def call {
pipeline {
parameters {
string (name: VAR1, defaultValue: "Peace", description: '' } <--- This works, but not beneficial
string (name: VAR2, defaultValue: "Space", description: '' } <--- This works, but not beneficial
stages {
stage ('Run script') {
steps {
groovyFunction("${VAR1}", "${VAR2}")
groovyFunction("Peace", "Space") <--- WHAT I WANT
}
}
}
}
}
groovyFunction.groovy
def call(var1, var2) {
sh 'echo MY values ${var1} and ${var2}'
sh "echo MY values ${var1} and ${var2}" <-- Works using double quotes, this messes up sed and for-loops...
}
SALIDA DE TUBERÍA CON PARÁMETROS:
MY values Peace and Space
SALIDA DE TUBERÍA SIN PARÁMETROS:
MY values and
Intenté usar la environment{}
palabra clave como sugerí en mi pregunta anterior, sin suerte. Jenkins - medio ambiente
Soy consciente de que existen problemas similares:
- Pasar una variable maravillosa al script de shell
- Cómo asignar una variable maravillosa a la variable de shell
- Parámetros de Jenkins
NOTA: Esto está cerca de un duplicado de mi pregunta solicitada Parámetro de Shell Jenkins
Gracias.
Respuestas
ACTUALIZADO
He actualizado la respuesta para usar la variable de entorno sin tener environment {}
Use variables de entorno como las que he usado aquí (refactoricé un poco su código):
def callfunc() {
sh 'echo MY values $VARENV1 and $VARENV2'
}
pipeline {
agent { label 'agent_1' }
stages {
stage ('Run script') {
steps {
script {
env.VARENV1 = "Peace"
env.VARENV2 = "Space"
}
callfunc()
}
}
}
}
env.VARENV1
y env.VARENV2
son las variables de entorno que he usado aquí dentro script{}
. Puede asignarles valores.
Esta es mi nueva salida:

Realmente espero que haya ayudado.
ACTUALIZACIONES PARA USAR FOR LOOP
Usar comillas simples triples para el script de shell para el bucle y agregarle una variable grrovy:
def callfunc() {
sh '''
export s="key"
echo $s for i in $VARENV1
do
echo "Looping ... i is set to $i"
done
'''
}
pipeline {
agent { label 'agent_1' }
stages {
stage ('Run script') {
steps {
script {
env.VARENV1 = "Peace"
}
callfunc()
}
}
}
}
SALIDA:
