Передача массива в качестве аргумента в конвейере Jenkins - PullRequest
0 голосов
/ 06 августа 2020

У меня есть общая библиотека, которая принимает параметры, которые я настраиваю для сжатия файлов в tar. Jenkinspipline выглядит так.

  stage("Package"){
            steps{
                compress_files("arg1", "arg2")
            }          
        } 

Общая библиотека compress_file выглядит так

#!/usr/bin/env groovy

// Process any number of arguments.
def call(String... args) {
    sh label: 'Create Directory to store tar files.', returnStdout: true,
        script: """ mkdir -p "$WORKSPACE/${env.PROJECT_NAME}" """
    args.each {
        sh label: 'Creating project directory.', returnStdout: true,
            script: """ mkdir -p "$WORKSPACE/${env.PROJECT_NAME}" """
        sh label: 'Coping contents to project directory.', returnStdout: true,
            script: """ cp -rv ${it} "$WORKSPACE/${env.PROJECT_NAME}/." """
    }
    sh label: 'Compressing project directory to a tar file.', returnStdout: true,
    script: """ tar -czf "${env.PROJECT_NAME}.tar.gz" "${env.PROJECT_NAME}" """
    sh label: 'Remove the Project directory..', returnStdout: true,
    script: """ rm -rf "$WORKSPACE/${env.PROJECT_NAME}" """    
}

Новое требование - использовать массив вместо обновления значений аргументов. Как или мы можем передать имя массива на этапе jenkinsfile

1 Ответ

1 голос
/ 07 августа 2020

Да, это возможно, из Jenkinsfile вы можете определить массив внутри stage () или вне stage () и использовать его, например,

В декларативном конвейере:

def files = ["arg1", "arg2"] as String[]
pipeline {
  agent any 
  stages {
     stage("Package") {
         steps {
           // script is optional 
           script {
             // you can manipulate the variable value of files here
           }
           compress_files(files)
         }
     }
  }
}

In конвейер со сценарием:

node() {
   //You can define the value here as well
   // def files = ["arg1", "arg2"] as String[]
   stage("Package"){
      def files = ["arg1", "arg2"] as String[]
      compress_files(files)       
   } 
}

А в общей библиотеке метод будет иметь вид

// var/compress_files.groovy

def call(String[] args) {
   args.each { 
      // retrive the value from ${it} and proceed with your logic
   }
}

или

def call(String... args) {
   args.each { 
      // retrive the value from ${it} and proceed with your logic
   }
}
...