Jenkins: Script not permitted to use method signature
I’ve recently ran into an error in a Jenkins CI/CD pipeline when using java.util.Date objects in my Groovy script pipeline and so I’d thought I’d share the problem and workaround.
Problem
In order to create a date time and build number stamp into an output build package as part of a Jenkins build I made use of the java Date object in Groovy, something like this:
1
2
3
def date1 = new Date(1456533546)
def today = new Date()
def diff = (today-date1)
On running the build I get this error in the console log:
1
2
3
_org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException:_
_Scripts not permitted to use staticMethod_
_org.codehaus.groovy.runtime.DateGroovyMethods minus java.util.Date_
It turns out that as the Groovy script jenkinsfile is running in the Groovy Sandbox in Jenkins it has a white-list of approved method signatures out of the box, but java.util.Date is not one of them.
Solution
If you add the Script Security Plugin to your Jenkins install, if its not there already, then you’ll be able to whitelist new methods and apis that can be used by the Jenkins pipeline scripts.
Log onto Jenkins as an Administrator and go to Manage Jenkins > In-process Script Approval and scroll to the bottom where the Script Security Plugin will have put new entries. Here you’ll find recent script permission failures and details.
Choosing to “Approve” the signature will then approve scripts to use this java signature (in this example the java.util.Date object) and the error should go away.
For more information see the official Jenkins docs here.