我正在构建一个需要使用一些Java标准库方法的Jenkins文件:
例如,在构建脚本的一位中,我需要从作为用户输入提供的URL中提取主机名。我想做这样的事情:
URI u = new URI(artifactoryIndexURL)
在脚本的另一部分中,我想使用java.lang.String将一些字符串内容替换为其他字符串内容。
不幸的是,这些类似乎不是白名单(或类似的东西):
org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: Scripts not permitted to use new java.net.URI java.lang.String
at org.jenkinsci.plugins.scriptsecurity.sandbox.whitelists.StaticWhitelist.rejectNew(StaticWhitelist.java:187)
at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onNewInstance(SandboxInterceptor.java:130)
at org.kohsuke.groovy.sandbox.impl.Checker$3.call(Checker.java:191)
at org.kohsuke.groovy.sandbox.impl.Checker.checkedConstructor(Checker.java:188)
at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.constructorCall(SandboxInvoker.java:20)
看起来詹金斯默认的Sandbox排除了除了非常微小的方法之外的所有方法。有没有办法允许我在我的Jenkins文件中运行某些Java类,这些类不需要我在Jenkins服务器上获得完全的管理权限?解决这个问题的正常方法是什么?
答案 0 :(得分:2)
我找到了一个简单的修复:您可以全局安装Jenkins库 - 禁用沙箱。
答案 1 :(得分:1)
您可以转到"管理Jenkins"逐步将这些方法列入白名单。从您的jenkins主页,然后选择菜单"进程内脚本批准"。随着时间的推移,您可以建立一个通用方法的合适白名单,如果您要批准白名单的危险方法,它会给您一个警告。