jenkins执行groovy脚本报不允许执行静态方法的异常处理
- 持续集成
- 2022-07-26
- 12热度
- 0评论
背景
使用 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
方法二:修改配置文件(不推荐)
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启动参数(不安全)
- 在插件市场安装 Permissive Script Security 插件
- 修改jenkins启动参数,增加
-Dpermissive-script-security.enabled=true
参数,并重启服务。