2017-03-10 3 views
0

Jenkins 파이프 라인 sh 명령의 returnStdout 기능을 사용하려고합니다. 이전 질문에서 당기 여기 https://jenkins.io/doc/pipeline/steps/workflow-durable-task-step/#code-sh-code-shell-scriptJenkins 파이프 라인 sh returnstdout이 작동하지 않습니다.

정의 : Is it possible to capture the stdout from the sh DSL command in the pipeline

내 원래 코드 :

node{ 
def output = sh(returnStdout: true, script: 'pwd') 
println "output = ${output}" 
} 

과 그 결과. 당신은 내가 대신 내 변수에 전달 된 결과의 종료 코드를 얻고 있음을 볼 수 있습니다

내가 너무 내 업데이트 된 코드는 다음과 같습니다)합니다 (.trim를 추가해야 할 수도 있습니다 생각 예제를 바탕으로
[Pipeline] node { 
[Pipeline] sh 
[Update_Stageing_DB] Running shell script 
+ pwd 
/mnt/storage/jenkins/workspace/Update_Stageing_DB 
[Pipeline] echo 
output = 0 
[Pipeline] } //node 
[Pipeline] Allocate node : End 
[Pipeline] End of Pipeline 
Finished: SUCCESS 

:

node{ 
def output = sh(returnStdout: true, script: 'pwd').trim() 
println "output = ${output}" 
} 

는하지만이 실패 할 전체 작업 결과 :

[Pipeline] node { 
[Pipeline] sh 
[Update_Stageing_DB] Running shell script 
+ pwd 
/mnt/storage/jenkins/workspace/Update_Stageing_DB 
[Pipeline] } //node 
[Pipeline] Allocate node : End 
[Pipeline] End of Pipeline 
hudson.remoting.ProxyException: groovy.lang.MissingMethodException: No signature of method: java.lang.Integer.trim() is applicable for argument types:() values: [] 
Possible solutions: wait(), grep(), wait(long), times(groovy.lang.Closure), div(java.lang.Character), print(java.io.PrintWriter) 
at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:58) 
at org.codehaus.groovy.runtime.callsite.PojoMetaClassSite.call(PojoMetaClassSite.java:49) 
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48) 
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113) 
at com.cloudbees.groovy.cps.sandbox.DefaultInvoker.methodCall(DefaultInvoker.java:15) 
at WorkflowScript.run(WorkflowScript:3) 
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.GeneratedMethodAccessor771.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.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) 
Finished: FAILURE 

임 내가 기본 뭔가를보고 싶어하지만 내 인생 나는이 간단한 코드와 무슨 잘못 볼 수 없습니다 확인합니다. 어떤 도움을 주시면 감사하겠습니다.

젠킨스 ver. 2.32.2

답변

1

방법 아니오 서명 : java.lang.Integer.trim()는 그 에러 메시지 sh 단계는 숫자 값을 리턴하는 것을 의미

적용 가능하다.
내게있어서 이것은 이 아닌 returnStatus 매개 변수를 sh 스텝 호출에 사용하는 경우에만 발생합니다.

플러그인이 최신이고 올바른 매개 변수를 사용하고 있는지 확인하십시오. 원격 SCM에서 파이프 라인을로드하는 경우, 어떤 빌드 페이지의 사이드 바에있는 "Replay"링크를 사용하여 어떤 Pipeline 스크립트가로드되었는지 정확하게 확인할 수 있습니다.

또한 실제로 셸 단계에서 pwd 만 실행해야하는 경우 pwd 파이프 라인 단계를 사용하여 약간을 단순화 할 수 있습니다.

+0

답변 해 주셔서 감사합니다. 니가 끝냈어. 필자의 플러그인을 업데이트해야했고, Pipeline을 2.5로 업데이트하고 종속성을 수정했으며 .trim()을 사용하는 두 번째 코드 조각이 예상대로 작동합니다. –

관련 문제