gpt4 book ai didi

jenkins - 如何打印多行字符串参数的每个元素?

转载 作者:行者123 更新时间:2023-12-04 15:40:58 29 4
gpt4 key购买 nike

我在 Jenkins (v2.7.1) 中有管道作业,我想在每行中用 3 个字符串打印多行字符串参数 ( Params ) 的每个元素:Foo、Bar、Baz 作为输入。

所以我尝试了以下语法(使用 split each ):

Params.split("\\r?\\n").each { param ->
println "Param: ${param}"
}

但它失败了:

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)



建议封装在 @NonCPS 方法中,或使用 Java 风格的循环。

所以我试图封装在一个@NonCPS 方法中,例如:
@NonCPS
def printParams() {
Params.split("\\r?\\n").each { param ->
println "Param: ${param}"
}
}
printParams()

但它失败了:

org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: Scripts not permitted to use staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods println groovy.lang.Closure java.lang.Object



没有函数(根据第一个示例),添加 @NonCPS一开始它提示意外的 token 。

我还按照使用 for 运算符的建议尝试了 Java 风格的语法(类似于 here ):
String[] params = Params.split("\\r?\\n")
for (String param: params) {
println "Param: ${param}"
}

这似乎在普通的 Groovy 中工作,但它在 Jenkins 中失败了:

java.io.NotSerializableException: java.util.AbstractList$Itr at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:860)



我应该使用哪种语法来使其工作?

最佳答案

当禁用 Use Groovy Sandbox 选项并添加 @NonCPS 时,代码工作正常辅助方法。或者,正如 @agg3l 所建议的那样, 进入 Jenkins 管理以允许此方法访问。

所以工作代码是(与第二个例子相同):

@NonCPS
def printParams() {
Params.split("\\r?\\n").each { param ->
println "Param: ${param}"
}
}
printParams()

关于jenkins - 如何打印多行字符串参数的每个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40195720/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com