[英]Jenkins - Passing parameter to groovy function
我一直在尝试用我的管道中的参数调用另一个 groovy function 但没有任何运气。
groovy function 我将参数传递给包含一个 bash 脚本,但是这个 bash 脚本无法识别我传递给它的参数。 但是,如果我传递的参数在管道中定义为parameters {}
,那么它就可以工作,但我不希望这样。
问题:
shell 脚本无法识别/理解 arguments,变量为空,没有值。
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 来自带有参数的管道:
MY values Peace and Space
OUTPUT 来自没有参数的管道:
MY values and
我已经尝试按照我上一个问题中的建议使用environment{}
关键字,但没有任何运气。 Jenkins - 环境
我知道那里有类似的问题:
注意:这接近于我提出的问题Shell 参数 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{}
中使用的环境变量。 您可以为它们赋值。
这是我的新 output:
我真的希望它有所帮助。
使用 FOR 循环的更新
对 shell 脚本使用三重单引号进行循环并向其添加 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()
}
}
}
}
OUTPUT:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.