如何在Jenkins Jenkinsfile沙箱中使用Java类(如java.net.URL)?

时间:2017-05-17 13:19:36

标签: jenkins groovy jenkins-pipeline

我正在构建一个需要使用一些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服务器上获得完全的管理权限?解决这个问题的正常方法是什么?

2 个答案:

答案 0 :(得分:2)

我找到了一个简单的修复:您可以全局安装Jenkins库 - 禁用沙箱。

答案 1 :(得分:1)

您可以转到"管理Jenkins"逐步将这些方法列入白名单。从您的jenkins主页,然后选择菜单"进程内脚本批准"。随着时间的推移,您可以建立一个通用方法的合适白名单,如果您要批准白名单的危险方法,它会给您一个警告。