Дженкинс - передача параметра функции groovy

Aug 21 2020

Я безуспешно пытался вызвать другую отличную функцию с параметрами внутри моего конвейера.
Groovy-функция, в которую я передаю параметры, состоит из сценария bash, но этот сценарий bash не распознает параметры, которые я ему передаю. Однако если параметр, переданный i, определен как a parameters {}в конвейере, он работает, но я не хочу этого.

ПРОБЛЕМА:
сценарий оболочки не распознает / не понимает аргументы, переменные пусты, значения отсутствуют.

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

ВЫХОД ИЗ ТРУБОПРОВОДА С ПАРАМЕТРАМИ:

MY values Peace and Space

ВЫХОД ИЗ ТРУБОПРОВОДА БЕЗ ПАРАМЕТРОВ:

MY values and

Я безуспешно пытался использовать environment{}ключевое слово, как предлагалось в моем предыдущем вопросе. Дженкинс - окружающая среда

Я знаю, что есть похожие проблемы:

  • Передать Groovy-переменную в сценарий оболочки
  • Как назначить Groovy-переменную переменной оболочки
  • Параметры Дженкинса

ПРИМЕЧАНИЕ. Это похоже на дубликат заданного мной параметра оболочки quesiton Jenkins.

Благодарю.

Ответы

1 AdityaNair Aug 21 2020 at 10:41

ОБНОВЛЕНО

Я обновил ответ, чтобы использовать переменную среды, не имея environment {}

Используйте переменные среды, подобные тем, которые я использовал здесь (я немного реорганизовал ваш код):

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и env.VARENV2переменные среды, которые я использовал здесь внутри script{}. Вы можете присвоить им значения.

Это мой новый результат:

Я очень надеюсь, что это помогло.

ОБНОВЛЕНИЯ ДЛЯ ИСПОЛЬЗОВАНИЯ ДЛЯ LOOP

Использование тройных одинарных кавычек для сценария оболочки для цикла и добавление к нему переменной 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()
        }
      }
    }
}

ВЫВОД: