web-dev-qa-db-ja.com

Jenkinsパイプラインビルドのセキュリティチェックを無効にする方法

このパイプラインを実行しようとしているローカルの信頼された環境でJenkinsを実行しています。このJenkinsfileはgitにチェックインされます。

#!groovy
node('master') {
    def ver = pomVersion()
    echo "Building version $ver"
}

def pomVersion(){
    def pomtext = readFile('pom.xml')
    def pomx = new XmlParser().parseText(pomtext)
    pomx.version.text()
}

ビルドを実行した最初の数回は、手動で変更を承認する必要がありました(Jenkins-> Mange Jenkins->インプロセススクリプト承認)。今、私はこの例外を受け取り、承認するものは何もありません。 XMLファイルを解析するだけです。これらのセキュリティチェックは、パイプラインビルドで完全にバイパスできますか?

org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: unclassified field groovy.util.Node version
    at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.unclassifiedField(SandboxInterceptor.Java:367)
    at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onGetProperty(SandboxInterceptor.Java:363)
    at org.kohsuke.groovy.sandbox.impl.Checker$4.call(Checker.Java:241)
    at org.kohsuke.groovy.sandbox.impl.Checker.checkedGetProperty(Checker.Java:238)
    at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.getProperty(SandboxInvoker.Java:23)
    at com.cloudbees.groovy.cps.impl.PropertyAccessBlock.rawGet(PropertyAccessBlock.Java:17)
    at WorkflowScript.pomVersion(WorkflowScript:10)
    at WorkflowScript.run(WorkflowScript:3)
    at ___cps.transform___(Native Method)
    at com.cloudbees.groovy.cps.impl.PropertyishBlock$ContinuationImpl.get(PropertyishBlock.Java:62)
    at com.cloudbees.groovy.cps.LValueBlock$GetAdapter.receive(LValueBlock.Java:30)
    at com.cloudbees.groovy.cps.impl.PropertyishBlock$ContinuationImpl.fixName(PropertyishBlock.Java:54)
    at Sun.reflect.GeneratedMethodAccessor479.invoke(Unknown Source)
    at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
    at Java.lang.reflect.Method.invoke(Method.Java:498)
    at com.cloudbees.groovy.cps.impl.ContinuationPtr$ContinuationImpl.receive(ContinuationPtr.Java:72)
    at com.cloudbees.groovy.cps.impl.ConstantBlock.eval(ConstantBlock.Java:21)
    at com.cloudbees.groovy.cps.Next.step(Next.Java:58)
    at com.cloudbees.groovy.cps.Continuable.run0(Continuable.Java:154)
    at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.access$001(SandboxContinuable.Java:18)
    at org.jenkinsci.plugins.workflow.cps.SandboxContinuable$1.call(SandboxContinuable.Java:32)
    at org.jenkinsci.plugins.workflow.cps.SandboxContinuable$1.call(SandboxContinuable.Java:29)
    at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.GroovySandbox.runInSandbox(GroovySandbox.Java:108)
    at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.run0(SandboxContinuable.Java:29)
    at org.jenkinsci.plugins.workflow.cps.CpsThread.runNextChunk(CpsThread.Java:164)
    at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.run(CpsThreadGroup.Java:276)
    at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.access$000(CpsThreadGroup.Java:78)
    at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.Java:185)
    at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.Java:183)
    at org.jenkinsci.plugins.workflow.cps.CpsVmExecutorService$2.call(CpsVmExecutorService.Java:47)
    at Java.util.concurrent.FutureTask.run(FutureTask.Java:266)
    at hudson.remoting.SingleLaneExecutorService$1.run(SingleLaneExecutorService.Java:112)
    at jenkins.util.ContextResettingExecutorService$1.run(ContextResettingExecutorService.Java:28)
    at Java.util.concurrent.Executors$RunnableAdapter.call(Executors.Java:511)
    at Java.util.concurrent.FutureTask.run(FutureTask.Java:266)
    at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1142)
    at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:617)
    at Java.lang.Thread.run(Thread.Java:745)
Finished: FAILURE
9
Gary

現在、それは不可能です。この問題にはオープンチケットがあります https://issues.jenkins-ci.org/browse/JENKINS-28178

8
Andre

次のjenkinsプラグインを試してください。 https://wiki.jenkins-ci.org/display/JENKINS/Permissive+Script+Security+Plugin サンドボックスを無効にします。私のために働く。

5
ruediste

次の手順で問題を解決できます。

  1. インストール Permissive Script Security プラグイン(バージョン0.3以降)
  2. 追加 permissive-script-security.enabled Jenkinsマスターへのコマンドラインパラメータと値:

    • trueスクリプトを承認する必要を無効にしたいが、潜在的に危険な署名がログに記録される場合:

      -Dpermissive-script-security.enabled=true
      
    • no_securityスクリプトを承認する必要を無効にし、潜在的に危険な署名のログも無効にする場合:

      -Dpermissive-script-security.enabled=no_security
      
4
agabrys

上記の回答のとおり、新しいJenkinsバージョンでは、スクリプトセキュリティが強化されています。ただし、Mavenのpom.xmlからバージョンを読み取る特定のユースケースでは、 Pipeline Utility Steps Plugin からreadMavenPomを使用できます:

pom = readMavenPom file: 'pom.xml'
pom.version

これの他のいくつかのソリューション StackOverflowの質問 も同様です。

1
Joep Weijers