如何解决Jenkinsfile 打印参数很好
我们有一个 Jenkinsfile,其参数声明如下:
def params = [string(name: 'ENVIRONMENT',value: environment),string(name: 'VERSION',value: version),string(name: 'REGION',value: region)]
我想回应这些,例如
DEPLOYING: ENVIRONMENT=STAGING,VERSION=1.3.0,REGION=EU
但是调用 echo "$params"
打印:
[@string(name=ENVIRONMENT,value=STAGING),@string(name=VERSION,value=1.3.0),@string(name=REGION,value=EU)]
我尝试迭代数组 - 例如:
params.each { echo it }
抛出 UnsupportedOperationException: no known implementation of class java.lang.String is using symbol ‘string’
params.each { echo it.name }
抛出 RejectedAccessException: No such field found: field org.jenkinsci.plugins.structs.describable.UninstantiatedDescribable name
如何很好地打印 params
数组?
编辑 - 来自马特舒查德的回应:
def params = [string(name: 'ENVIRONMENT',value: "STAGING"),value: "1.3.0"),value: "EU")]
print "$params"
params.each() { param,value ->
print "Parameter: ${param},Value: ${value}"
}
返回(即值全为空):
[@string(name=ENVIRONMENT,value=EU)]
Parameter: @string(name=ENVIRONMENT,Value: null
Parameter: @string(name=VERSION,Value: null
Parameter: @string(name=REGION,value=EU),Value: null
解决方法
您可以使用 Groovy 映射迭代器 lambda 方法(例如 each
)来迭代 params
映射。一个例子如下:
params.each() { param,value ->
print "Parameter: ${param},Value: ${value}"
}
如果您决定直接在 pipeline
块中使用它,那么在使用声明式 DSL 时需要将其放置在 script
块中。
必须有更好的方法,但以下方法有效
迭代 params 数组:
1. Cast each parameter to a regular String
2. Extracted the value between @string( VALUE )
3. Split the key/value pairs first by comma ','
4. Then split each side of the above by equals '='
5. Concatenate the second argument
def pretty(params) {
def s = ""
params.each { param ->
def a = ("${param}" =~ /^@string\((.+)\)$/)[ 0 ][ 1 ]
def b = a.split(",")
s = s + b[0].split("=")[1] + "=" + b[1].split("=")[1] + "\n"
}
return s
}
返回:
ENVIRONMENT=STAGING
VERSION=1.3.0
REGION=EU
,
params
的目标是参数化构建吗?
如果是这种情况,您可以使用 parameters
指令
parameters
指令提供了一个参数列表,用户可以
触发管道时应提供。
这些值
用户指定的参数可通过管道步骤使用
params
对象。
声明式管道:
Declarative Pipeline 支持开箱即用的参数,允许 通过管道在运行时接受用户指定的参数 参数指令。
parameters {
string(name: 'ENVIRONMENT',defaultValue: 'STAGING',description: 'Environment to test. e.g: production/develop'),string(name: 'VERSION',defaultValue: '1.3.0',description: 'Version to run'),string(name: 'REGION',defaultValue: 'EU',description: 'Region')
}
脚本化管道:
使用脚本化流水线配置参数是 完成属性步骤,可以在代码段中找到 发电机
properties([
parameters([
string(name: 'ENVIRONMENT',description: 'Region')
])
])
现在,这些参数可以作为 params
变量的成员访问
所以,那么你可以简单地使用:
params.each() { param,value ->
print "Parameter: ${param},Value: ${value}"
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。