Дженкинс - передача параметра функции groovy
Я безуспешно пытался вызвать другую отличную функцию с параметрами внутри моего конвейера.
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.
Благодарю.
Ответы
ОБНОВЛЕНО
Я обновил ответ, чтобы использовать переменную среды, не имея 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()
}
}
}
}
ВЫВОД:
