如何打印多行字符串参数的每个元素? [英] How to print each element of Multi-line String Parameter?
问题描述
我在Jenkins的流水线工作(v2.7.1)中打印了多行字符串参数( Params
)的每个元素,其中包含3个字符串每行: , Bar , Baz 作为输入。
拆分
和
): Params.split(\\r?\\ n),每个{参数 - >
printlnParam:$ {param}
}
但失败与:
java.lang.UnsupportedOperationException
:调用public static java.lang。对象
org.codehaus.groovy.runtime.DefaultGroovyMethods.each(java.lang.Object,groovy.lang.Closure)尚未支持CPS转换的闭包( JENKINS-26481 );封装在@NonCPS方法中,或者在org.jenkinsci.plugins.workflow.cps.GroovyClassLoaderWhitelist.checkJenkins26481(GroovyClassLoaderWhitelist.java:90)中使用Java风格的循环
建议封装在@NonCPS方法中,或者使用Java风格的循环。
所以我试着用@NonCPS方法封装:
@NonCPS
def printParams(){
Params.split(\\\\\\\\\)。each {param - >
printlnParam:$ {param}
}
}
printParams()
,但会失败:
org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException:脚本没有允许使用staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods println groovy.lang.Closure java.lang.Object
没有函数(按照第一个示例),在开始时添加 @NonCPS
,它会抱怨意外令牌。
我也尝试过使用 for 运算符所建议的Java风格语法(类似于这里):
String [] params = Params.split(\\ \\\r?\\\\
)
for(String param:params){
printlnParam:$ {param}
}
这似乎在普通的Groovy中工作,但在Jenkins中失败:
$ b
java.io.NotSerializableException
:java.util.AbstractList $ Itr $ b $ at org .jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:860)
我应该使用哪种语法才能使其工作? 解除方法
禁用时,代码可以正常工作使用Groovy Sandbox 选项并添加 @NonCPS
辅助方法。或者,如 @ agg3l ,继续 Jenkins管理以允许此方法访问。
因此,工作代码(与第二个示例相同):
@NonCPS
def printParams(){
Params.split(\\r?\\\ \\ n)。每个{参数 - >
printlnParam:$ {param}
}
}
printParams()
I've Pipeline job in Jenkins (v2.7.1) where I'd like to print each element of Multi-line String parameter (Params
) with 3 strings in each line: Foo, Bar, Baz as an input.
So I've tried the following syntax (using split
and each
):
Params.split("\\r?\\n").each { param ->
println "Param: ${param}"
}
but it fails with:
java.lang.UnsupportedOperationException
: Calling public static java.lang.Object org.codehaus.groovy.runtime.DefaultGroovyMethods.each(java.lang.Object,groovy.lang.Closure) on a CPS-transformed closure is not yet supported (JENKINS-26481); encapsulate in a @NonCPS method, or use Java-style loops at org.jenkinsci.plugins.workflow.cps.GroovyClassLoaderWhitelist.checkJenkins26481(GroovyClassLoaderWhitelist.java:90)
which suggest to encapsulate in a @NonCPS method, or use Java-style loops.
So I've tried to encapsulate in a @NonCPS method like:
@NonCPS
def printParams() {
Params.split("\\r?\\n").each { param ->
println "Param: ${param}"
}
}
printParams()
but it fails with:
org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: Scripts not permitted to use staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods println groovy.lang.Closure java.lang.Object
Without the function (as per first example), adding @NonCPS
at the beginning it complains about unexpected token.
I also tried Java-style syntax as suggested by using for operator (similar as here):
String[] params = Params.split("\\r?\\n")
for (String param: params) {
println "Param: ${param}"
}
which seems to work in plain Groovy, but it fails in Jenkins with:
java.io.NotSerializableException
: java.util.AbstractList$Itr at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:860)
Which syntax I should use to make it work?
The code works fine when disabling a Use Groovy Sandbox option and adding @NonCPS
helper method. Alternatively, as suggested by @agg3l, proceed to Jenkins management to permit this method access.
So the working code is (same as the 2nd example):
@NonCPS
def printParams() {
Params.split("\\r?\\n").each { param ->
println "Param: ${param}"
}
}
printParams()
这篇关于如何打印多行字符串参数的每个元素?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!