2016-03-10 19 views
1

我正在使用Jenkins v:1.647和Pipeline插件v:1.14。我的管道工作引入了一個運行我的編排的groovy腳本。我的問題是我有一個可執行的jar,將執行一些Scalr API操作並返回一個新的服務器主機名,通過標準輸出。我有一個工作片段,在Jenkins之外工作。Jenkins groovy pipeline - 需要執行jar文件的指令souther

def serverHostName = "java -jar scalr-api.jar testing654 n1-standard-8".execute().text 

此代碼工作詹金斯的罰款之外,但我的問題是我跑的管道,當我收到不斷煩人RejectedAccessException.But不像其他腳本安全異常沒有選擇,我批准問題的方法。

進出口尋找的任何解決方案,可以讓過去的腳本安全,讓我來運行罐子並獲得標準輸出到我的劇本以後使用

感謝

詹金斯錯誤:

org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: unclassified method java.lang.UNIXProcess getText 
at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:74) 
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:97) 
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.fixName(FunctionCallBlock.java:74) 
at sun.reflect.GeneratedMethodAccessor291.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:606) 
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:19) 
at org.jenkinsci.plugins.workflow.cps.SandboxContinuable$1.call(SandboxContinuable.java:33) 
at org.jenkinsci.plugins.workflow.cps.SandboxContinuable$1.call(SandboxContinuable.java:30) 
at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.GroovySandbox.runInSandbox(GroovySandbox.java:106) 
at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.run0(SandboxContinuable.java:30) 
at org.jenkinsci.plugins.workflow.cps.CpsThread.runNextChunk(CpsThread.java:164) 
at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.run(CpsThreadGroup.java:277) 
at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.access$000(CpsThreadGroup.java:77) 
at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:186) 
at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:184) 
at org.jenkinsci.plugins.workflow.cps.CpsVmExecutorService$2.call(CpsVmExecutorService.java:47) 
at java.util.concurrent.FutureTask.run(FutureTask.java:262) 
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:471) 
at java.util.concurrent.FutureTask.run(FutureTask.java:262) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
at java.lang.Thread.run(Thread.java:745) 

完成:失敗

回答

1

您可以使用sh步驟從管道腳本執行shell命令。訣竅是將執行的命令的輸出重定向到一個文件,然後在下一步中使用readFile讀取它。

這應該做你想在Linux上從什麼:

sh "java -jar scalr-api.jar testing654 n1-standard-8 > scalr.out" 
def out = readFile 'scalr.out' 

在窗口奴:

bat "java -jar scalr-api.jar testing654 n1-standard-8 > scalr.out" 
def out = readFile 'scalr.out' 
+0

我來到這個相同的解決方案,它對我很好。最終,我改變了策略,並且讓流水線執行一個包含我的邏輯大部分的腳本。我需要這樣做,因爲沙盒證券是一團糟的工作,而Im從SCM提取時被迫使用沙箱。 –

3

作爲的Pipeline: Nodes and Processes 2.4版本就足夠了使用方法:

def out = sh script: 'java -jar scalr-api.jar testing654 n1-standard-8', returnStdout: true