Jenkins - Meneruskan parameter ke fungsi groovy

Aug 21 2020

Saya sudah mencoba memanggil fungsi groovy lain dengan parameter di dalam pipeline saya tanpa hasil.
Fungsi groovy yang saya berikan parameter terdiri dari skrip bash, tetapi skrip bash ini tidak mengenali parameter yang saya berikan. Namun, jika parameter yang dilewatkan oleh i didefinisikan sebagai a parameters {}di dalam pipa, maka itu berfungsi, tetapi saya tidak menginginkan ini.

MASALAH:
Skrip shell tidak mengenali / memahami argumen, variabel kosong, tidak ada nilai.

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

OUTPUT DARI PIPA DENGAN PARAMETER:

MY values Peace and Space

OUTPUT DARI PIPA TANPA PARAMETER:

MY values and

Saya telah mencoba menggunakan environment{}kata kunci seperti yang disarankan dalam pertanyaan saya sebelumnya, tanpa hasil. Jenkins - lingkungan

Saya menyadari bahwa ada masalah serupa di luar sana:

  • Meneruskan variabel groovy ke skrip shell
  • Cara menetapkan variabel groovy ke variabel shell
  • Parameter Jenkins

CATATAN: Ini dekat dengan duplikat dari parameter Shell quesiton pertanyaan saya Jenkins

Terima kasih.

Jawaban

1 AdityaNair Aug 21 2020 at 10:41

DIPERBARUI

Saya telah memperbarui jawaban untuk menggunakan variabel lingkungan tanpa harus environment {}

Gunakan variabel lingkungan seperti yang saya gunakan di sini (saya refactored kode Anda sedikit):

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.VARENV1dan env.VARENV2merupakan variabel lingkungan yang saya gunakan di sini di dalam script{}. Anda dapat memberikan nilai pada mereka.

Ini adalah keluaran baru saya:

Saya sangat berharap ini membantu.

PEMBARUAN PENGGUNAAN UNTUK LOOP

Menggunakan tiga tanda kutip tunggal untuk skrip shell untuk loop dan menambahkan variabel grrovy padanya:

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()
        }
      }
    }
}

KELUARAN: