Jenkins - Pasando parámetro a una función maravillosa

Aug 21 2020

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

1 AdityaNair Aug 21 2020 at 10:41

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.VARENV1y env.VARENV2son 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: