Edited at

Jenkins Pipeline Plugin で RejectedAccessException 例外が発生する

More than 1 year has passed since last update.

Jenkins の Pipeline plugin (旧称 Workflow Plugin) を使うと、リポジトリに Jenkinsfile というファイルを配置してビルド処理をそこに書くことができます。 ビルド処理は Groovy による DSL で記述します。

さてさて、そんな Jenkinsfile に書かれた処理を Pipeline plugin で実行すると、以下のようなエラーが出ることがあります。 以下の例は "test".toUpperCase() を Jenkinsfile に書いた場合に発生したエラーです。 (ちゃんと試してないけど Script Security Plugin の最新バージョンだと起こらないと思います。)

org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: Scripts not permitted to use method java.lang.String toUpperCase

at org.jenkinsci.plugins.scriptsecurity.sandbox.whitelists.StaticWhitelist.rejectMethod(StaticWhitelist.java:158)
at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:80)
at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:149)
at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:146)
at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.methodCall(SandboxInvoker.java:15)
at WorkflowScript.capitalize(WorkflowScript:76)
at WorkflowScript.run(WorkflowScript:106)
(以下略)

これは何かというと Script Security Plugin の機能です。 Groovy のスクリプトの中に許可されていないメソッド呼び出しがあるとこういう例外が発生します。

Jenkinsfile を弄っているとたまにこういう例外に遭遇して困りますね。 そのメソッドを使わないようにするしかないと思っていたのですが、なんと許可されていないメソッド呼び出しを Jenkins の admin 権限で許可することができます!

一度スクリプトを実行して例外を発生させましょう。 そのあと、Manage Jenkins » In-process Script Approval で管理画面に進むと、拒絶されたメソッド呼び出しが一覧されるので、そこでメソッド呼び出しの種類を指定して許可することができます。 もちろん危険なメソッド呼び出しは許可しないようにしましょう。

Pipeline Plugin のチュートリアルにも書かれてましたが、ちゃんと読んでなかったのでちょっとハマりました。 Pipeline plugin を使う際にはこういう仕組みが入ってることも覚えておきましょう!


関連ページ