Jenkins2.0管道脚本拒绝日期算术

时间:2018-02-27 18:35:31

标签: jenkins groovy jenkins-plugins jenkins-pipeline jenkins-groovy

我在groovy Jenkinsfile中有以下代码:

def current = new SimpleDateFormat('yyyy-MM-dd HH:mm:ss.SSSZ').parse(currenttime.trim())
println current
def end_date = new SimpleDateFormat('yyyy-MM-dd HH:mm:ss.SSSZ').parse(scheduled_end_date.trim())
println end_date
schedule_grace_period_validity = current - end_date > 5 ? false : true

输出为:

Tue Feb 27 13:20:54 EST 2018
[Pipeline] echo
Mon Dec 18 18:00:00 EST 2017
[Pipeline] echo
org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: Scripts not permitted to use staticMethod org.codehaus.groovy.runtime.DateGroovyMethods minus java.util.Date java.util.Date 

这在我的本地方框中运行得很好,但在Jenkins的沙箱模式下,这失败了,我无法关闭Jenkins中的沙盒模式。

这有什么解决方法吗?

1 个答案:

答案 0 :(得分:2)

最简单的方法是转到Jenkins实例中的/scriptApproval/页面并批准签名。在运行脚本后遇到此异常时,您将在脚本批准页面中看到类似的内容:

enter image description here

只需点击批准然后再次运行您的脚本。

或者,您可以尝试计算两个日期之间的差异:

int diff = BigDecimal.valueOf((current.time - end_date.time) / 86400000).setScale(0, java.math.RoundingMode.UP).intValue()

但在这种情况下,您可能会遇到RejectedAccessException。我尝试在我当地的Jenkins实例中的Groovy沙箱中运行它,我得到了这个:

[Pipeline] End of Pipeline
org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: Scripts not permitted to use method java.util.Date getTime
    at org.jenkinsci.plugins.scriptsecurity.sandbox.whitelists.StaticWhitelist.rejectMethod(StaticWhitelist.java:175)
    at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor$6.reject(SandboxInterceptor.java:261)
    at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onGetProperty(SandboxInterceptor.java:381)
    at org.kohsuke.groovy.sandbox.impl.Checker$6.call(Checker.java:284)
    at org.kohsuke.groovy.sandbox.impl.Checker.checkedGetProperty(Checke