2017-03-10 5 views
0

Ich versuche, die returnStdout-Funktion der Jenkins-Pipeline SH-Befehl zu verwenden. definiert hier https://jenkins.io/doc/pipeline/steps/workflow-durable-task-step/#code-sh-code-shell-scriptJenkins pipeline sh returnstdout funktioniert nicht

aus vorherigen Frage Ziehen und Antworten: Is it possible to capture the stdout from the sh DSL command in the pipeline

Mein ursprünglicher Code:

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

und sein Ergebnis. Sie können sehen, dass ich Exit-Code in meine Variable übergeben, anstatt das Ergebnis bin immer:

[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 

Basierend auf den Beispielen, die ich dachte, ich könnte die .trim hinzufügen müssen() so meine aktualisierten Code wie folgt aussieht:

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

aber dies führt in dem gesamten Auftrag zu scheitern:

[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 

ich bin sicher, ich bin fehle etwas grundlegende, aber für das Leben von mir kann ich nicht sehen, was falsch mit diesem einfachen Code. Jede Hilfe wäre willkommen.

Jenkins ver.

2.32.2

Antwort

1

Keine Signatur der Methode: java.lang.Integer.trim() ist anwendbar

Diese Fehlermeldung bedeutet, dass der Schritt sh einen numerischen Wert zurückkehrt.
Für mich tritt dies nur auf, wenn ich den returnStatus Parameter anstelle returnStdout im sh Schrittaufruf verwende.

Stellen Sie sicher, dass Ihre Plug-Ins auf dem neuesten Stand sind und dass Sie den richtigen Parameter verwenden. Sie können den Link "Replay" in der Seitenleiste auf jeder Build-Seite verwenden, um genau zu sehen, welche Pipeline-Skripte geladen wurden, wenn Sie beispielsweise die Pipeline von einem Remote-SCM laden.

Wenn Sie wirklich nur pwd im Shell-Schritt ausführen müssen, können Sie ein wenig vereinfachen, indem Sie den pwd Pipeline-Schritt verwenden.

+0

Danke für die Antwort. Du hast den Nagel auf den Kopf getroffen. Meine Plugins mussten aktualisiert werden, ich habe die Pipeline auf 2.5 sowie ihre Abhängigkeiten aktualisiert und nun funktioniert mein zweites Code-Snippet, das .trim() verwendet, wie erwartet. –

Verwandte Themen