Jenkins Groovy CPS转换不支持spread运算符报错解决方案
问题原因
你遇到的spread not yet supported for CPS transformation报错是Jenkins Pipeline Groovy沙箱的已知限制:流水线执行时会对脚本做CPS(连续传递风格)字节码转换,来支持流水线步骤的暂停/恢复能力,但目前CPS转换逻辑不支持Groovy的展开运算符*.,和你写的正则匹配逻辑本身没有关系。
可直接使用的修复方案
不要使用*.展开运算符,改用CPS兼容的collect方法做列表遍历映射即可,代码如下:
def parsed_list = ['29/29(100%)', '36/36(10%)', '32/32(100%)', '18/18(100%)', '18/18(100%)', '6/6(100%)'] def percentages = parsed_list.collect { it.find(/\d+%/) }
执行后percentages会得到每个字符串匹配到的百分比值。
注意:你给出的预期结果为全
100%,但当前列表第二个元素36/36(10%)匹配结果为10%,如果是输入笔误、实际需要过滤仅保留100%的结果,可以追加过滤逻辑:def percentages = parsed_list.collect { it.find(/\d+%/) }.findAll { it == '100%' }
可选方案
如果你希望保留原生Groovy的展开运算符写法,可以把提取逻辑封装到添加@NonCPS注解的方法中,被该注解标记的方法会跳过CPS转换,支持所有原生Groovy语法:
@NonCPS def getPercentages(List source) { return source*.find(/\d+%/) } def percentages = getPercentages(parsed_list)
内容的提问来源于stack exchange,提问作者jacaaa
相关产品推荐
相关产品推荐

