问题描述
在 Jenkins Pipeline 中,我们从控制台中看到类似如下提示信息:
expected to call org.jfrog.hudson.pipeline.common.types.ArtifactoryServer.download but wound up catching artifactoryDownload; see: https://jenkins.io/redirect/pipeline-cps-method-mismatches/
问题原因
正如页面 Pipeline CPS Method Mismatches / Use of Pipeline steps from \@NonCPS 所说:
but non-CPS-transformed code may not call CPS-transformed code.
解决方法
我们遇到该警告的原因有一下几种:
场景一:在带有 NonCPS 注解的方法中,调用 Jenkins Pipepline 的步骤(Step),导致该提示出现 # 09/21/2020
解决方法:去掉方法的 NonCPS 注解,但是需要对 Closure 进行改写,转为使用普通的语法。
场景二:在 eachLine 中,调用 Jenkins Pipeline 方法,导致该提示出现 # 01/25/2021
Pipeline CPS Method Mismatches
我们在 String 的 eachLine 中使用 Jenkins Pipeline Step sh 导致出现该提示(该问题与「场景一」类似)。
解决方法:我们改用 split("\\r?\\n") 进行字符串分割,然后使用 for 循环进行处理。
参考文献
Pipeline CPS Method Mismatches