jenkins执行groovy脚本报不允许执行静态方法的异常处理

背景

使用 jenkinspipeline ,想在 jenkins 本地执行 shell 命令,流水线代码如下:

pipeline {
    agent any

    stages {
        stage('Hello') {
            steps {
                script{
                    def sys="echo 'prpall,undwrt'".execute().text
                    println sys
                }
            }
        }
    }
}

执行构建后,报错:

14:44:47  [Pipeline] {
14:44:47  Scripts not permitted to use staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods execute java.lang.String. Administrators can decide whether to approve or reject this signature.
14:44:47  [Pipeline] }
14:44:47  [Pipeline] // script
14:44:47  [Pipeline] }
14:44:47  [Pipeline] // stage
14:44:47  [Pipeline] }
14:44:47  [Pipeline] // node
14:44:48  [Pipeline] End of Pipeline
14:44:48  org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: Scripts not permitted to use staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods execute java.lang.String
14:44:48    at org.jenkinsci.plugins.scriptsecurity.sandbox.whitelists.StaticWhitelist.rejectStaticMethod(StaticWhitelist.java:243)
14:44:48    at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:118)
14:44:48    at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:161)
14:44:48    at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:165)
14:44:48    at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.methodCall(SandboxInvoker.java:17)

大概意思就是拒绝访问,脚本中不给执行静态方法

处理方法

方法一:jenkins页面配置静态方法权限

在 Dashboard >> Manage jenkins >> In-process Script Approval ,执行 Approve
file
file

方法二:修改配置文件(不推荐)

vi ${jenkins_home}/scriptApproval.xml

在 approvedSignatures 标签中增加内容,格式参考如下:

  <approvedSignatures>
    <string>staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods execute java.lang.String</string>
    <string>staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods removeElement java.util.Collection java.lang.Object</string>
    <string>staticMethod org.codehaus.groovy.runtime.ProcessGroovyMethods getText java.lang.Process</string>
  </approvedSignatures>

修改完,重启 jenkins 服务

方法三:修改jenkins启动参数(不安全)

  1. 在插件市场安装 Permissive Script Security 插件
    file
  2. 修改jenkins启动参数,增加 -Dpermissive-script-security.enabled=true 参数,并重启服务。