Jenkins - Passaggio del parametro alla funzione groovy

Aug 21 2020

Ho provato a chiamare un'altra funzione groovy con parametri all'interno della mia pipeline senza fortuna.
La funzione groovy a cui sto passando i parametri consiste in uno script bash, ma questo script bash non riconosce i parametri che gli sto passando. Se tuttavia il parametro passato da è stato definito come a parameters {}nella pipeline, allora funziona, ma non lo voglio.

PROBLEMA:
lo script della shell non riconosce / comprende gli argomenti, le variabili sono vuote, nessun valore.

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...
}

USCITA DA CONDOTTA CON PARAMETRI:

MY values Peace and Space

USCITA DA TUBAZIONE SENZA PARAMETRI:

MY values and

Ho provato a utilizzare la environment{}parola chiave come suggerito nella mia domanda precedente, senza alcuna fortuna. Jenkins - ambiente

Sono consapevole che ci sono problemi simili là fuori:

  • Passa la variabile groovy allo script della shell
  • Come assegnare una variabile groovy a una variabile di shell
  • Parametri di Jenkins

NOTA: Questo è vicino a un duplicato del mio parametro Shell di domanda Jenkins

Grazie.

Risposte

1 AdityaNair Aug 21 2020 at 10:41

AGGIORNATO

Ho aggiornato la risposta per utilizzare la variabile d'ambiente senza averla environment {}

Usa variabili d'ambiente come quelle che ho usato qui (ho refactoring un po 'il tuo codice):

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.VARENV1e env.VARENV2sono le variabili d'ambiente che ho usato qui dentro script{}. Puoi assegnare loro dei valori.

Questa è la mia nuova uscita:

Spero davvero che abbia aiutato.

AGGIORNAMENTI PER L'USO DI FOR LOOP

Utilizzo di virgolette singole triple per lo script di shell per il ciclo e l'aggiunta di una variabile 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()
        }
      }
    }
}

PRODUZIONE: