[解決済み] Jenkins CI Pipeline スクリプトで groovy.lang.GroovyObject メソッドを使用することができない。
質問
私はJavaプロジェクトをコンパイルするためにJenkins 2を使用しています。私はpom.xmlからバージョンを読みたいと思い、私はこの例に従っていました。
https://github.com/jenkinsci/pipeline-plugin/blob/master/TUTORIAL.md
例では示唆されています。
ファイルシステムにアクセスするセキュリティ上の問題があるようですが、何がその問題を与えているのか(あるいはなぜそうなっているのか)わかりません。
私は例と少し違うことをやっているだけです。
def version() {
String path = pwd();
def matcher = readFile("${path}/pom.xml") =~ '<version>(.+)</version>'
return matcher ? matcher[0][1] : null
}
version' メソッドを実行する際に発生するエラー :
org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: Scripts not permitted to use method groovy.lang.GroovyObject invokeMethod java.lang.String java.lang.Object (org.codehaus.groovy.runtime.GStringImpl call org.codehaus.groovy.runtime.GStringImpl)
at org.jenkinsci.plugins.scriptsecurity.sandbox.whitelists.StaticWhitelist.rejectMethod(StaticWhitelist.java:165)
at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:117)
at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:103)
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.run(WorkflowScript:71)
at ___cps.transform___(Native Method)
at com.cloudbees.groovy.cps.impl.ContinuationGroup.methodCall(ContinuationGroup.java:55)
at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.dispatchOrArg(FunctionCallBlock.java:106)
at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.fixArg(FunctionCallBlock.java:79)
at sun.reflect.GeneratedMethodAccessor408.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at com.cloudbees.groovy.cps.impl.ContinuationPtr$ContinuationImpl.receive(ContinuationPtr.java:72)
at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.dispatchOrArg(FunctionCallBlock.java:100)
at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.fixArg(FunctionCallBlock.java:79)
at sun.reflect.GeneratedMethodAccessor408.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at com.cloudbees.groovy.cps.impl.ContinuationPtr$ContinuationImpl.receive(ContinuationPtr.java:72)
at com.cloudbees.groovy.cps.impl.ContinuationGroup.methodCall(ContinuationGroup.java:57)
at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.dispatchOrArg(FunctionCallBlock.java:106)
at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.fixArg(FunctionCallBlock.java:79)
at sun.reflect.GeneratedMethodAccessor408.invoke(Unknown Source)
私は以下のバージョンを使用しています。 プラグインパイプライン 2.1 Jenkins 2.2
どのように解決するのですか?
クイックフィックスで解決します。
私も同様の問題がありましたが、次のようにして解決しました。
- jenkins に移動し、jenkins を管理します。
- 保留中のコマンドがあり、それを承認する必要がありました。
選択肢1:サンドボックスを無効にする
このように 記事 が詳しく説明しているように、groovyスクリプトはデフォルトでサンドボックスモードで実行されます。これはgroovyのメソッドのサブセットが管理者の承認なしに実行できることを意味します。サンドボックスモードでないスクリプトを実行することも可能で、その場合、スクリプト全体を一度に管理者の承認が必要であることを意味します。これにより、ユーザが一行ずつ承認することを防いでいます。
サンドボックスなしでスクリプトを実行するには、スクリプトのすぐ下にあるプロジェクト設定のこのチェックボックスのチェックを外すことで可能です。
代替案2: スクリプトセキュリティを無効にする
このように 記事 では、スクリプトのセキュリティを完全に無効にすることも可能であることを説明しています。まず permissive script security プラグイン をインストールし、その後jenkins.xmlファイルを変更して、この引数を追加します。
<ブロッククオート-Dpermissive-script-security.enabled=trueを追加します。
というわけで、jenkins.xmlは以下のようになります。
<executable>..bin\java</executable>
<arguments>-Dpermissive-script-security.enabled=true -Xrs -Xmx4096m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -jar "%BASE%\jenkins.war" --httpPort=80 --webroot="%BASE%\war"</arguments>
これを実装する場合は、自分が何をしているのかをよく理解しておいてください
関連
-
Mavenプロジェクトのパッケージングで[INFO]コンパイルに失敗する問題の解決方法
-
スナップショットでアーティファクト ... :pom:1.0-SNAPSHOT が見つかりませんでした。
-
[解決済み] MavenにおけるdependencyManagementとdependenciesの相違点
-
[解決済み] mavenの強制アップデートを行うには?
-
[解決済み] Mavenビルド時のサブモジュールのスキップ
-
[解決済み] Mavenがリポジトリの依存関係を更新したかどうかをチェックする
-
[解決済み] 'parent.relativePath' は org.apache:apache ではなく com.mycompany:MyProject を指しています - なぜですか?
-
[解決済み] プロキシ経由でMavenを使用するにはどうすればよいですか?
-
[解決済み] エラー ENOENT: そのようなファイルやディレクトリはありません。
-
[解決済み] Maven Jacoco 設定 - レポートからクラス/パッケージを除外することができません。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Maven NoClassDefFoundError: org/codehaus/plexus/classworlds/launcher/Launcher
-
起動時の子コンテナの処理に失敗したエラー
-
説明 リソースパス 場所 種類 ArtifactTransferException: アーティファクトを転送できませんでした
-
[解決済み] XHTMLの自己完結型タグを除くオープンタグにマッチするRegEx
-
[解決済み] MavenにおけるdependencyManagementとdependenciesの相違点
-
[解決済み】mavenのダウンロードの進捗状況表示を無効にする
-
[解決済み] Mavenで単体テストを禁止し、統合テストを許可する
-
[解決済み] Mavenです。このプロジェクトのパッケージングでは、ビルドアーティファクトにファイルが割り当てられていません。
-
[解決済み] mavenを使用したfat jarのビルド
-
[解決済み] Mavenがアーティファクトを取得するためにリモートリポジトリに行くのではなく、ローカルリポジトリを使用するように強制するにはどうすればよいですか?