web-dev-qa-db-de.com

Jenkins Pipeline-Bedingung ist erfolgreich, Jenkins zeigt jedoch, dass Build als fehlgeschlagen ist

Jenkins-Version = 2.19 Jenkins-Multibranch-Pipeline-Plug-In-Version = 2.92

Ich habe eine Jenkins-Datei mit einigen bedingten Stufen, die auf der Branche basieren.

Hier ist eine aus Gründen der Kürze modifizierte Version meiner Jenkinsfile:

node {
    stage('Checkout') {
        checkout scm
    }

    stage('Clean Verify') {
        sh 'mvn clean verify'
    }

    if (env.BRANCH_NAME == "develop") {
        stage('Docker') {
            sh 'mvn docker:build -DpushImage'
        }
    }
}

Ich benutze das Plug-In für die Mehrsparten-Pipeline.

Es erkennt und baut alle meine Niederlassungen erfolgreich auf.

Das Problem, das ich habe, ist, dass alle Builds als fehlgeschlagen gemeldet werden, auch wenn ich bei jedem Schritt den Status "Erfolg" meldet.

Ich habe ein Bild angehängt, das einen Zweig der Funktion zeigt, in dem die beiden von mir gewünschten Stufen ausgeführt und mit Erfolg abgeschlossen wurden. Sie können jedoch sehen, dass der Build tatsächlich als fehlgeschlagen gemeldet wurde.

 Jenkins failed build

Das gleiche Ergebnis erhalte ich auch für den Entwicklungszweig - er führt die Docker-Phase erfolgreich aus, aber die Build-Berichte sind fehlgeschlagen.

Ich gehe davon aus, dass jede Niederlassung Erfolg vermelden wird, da alle Stufen dieser Niederlassung bestanden haben.

BEARBEITEN 1

Hier ist das Ende des Build-Logs (ich hoffe, dass dies ausreicht, da ich nicht alle privaten Informationen auswählen wollte, aber lass es mich wissen, wenn nötig)

[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 30.459 s
[INFO] Finished at: 2017-02-21T15:13:02+11:00
[INFO] Final Memory: 84M/769M
[INFO] ------------------------------------------------------------------------
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] sh
Required context class hudson.FilePath is missing
Perhaps you forgot to surround the code with a step that provides this, such as: node
[Pipeline] End of Pipeline
org.jenkinsci.plugins.workflow.steps.MissingContextVariableException: Required context class hudson.FilePath is missing
    at org.jenkinsci.plugins.workflow.steps.StepDescriptor.checkContextAvailability(StepDescriptor.Java:253)
at org.jenkinsci.plugins.workflow.cps.DSL.invokeStep(DSL.Java:179)
at org.jenkinsci.plugins.workflow.cps.DSL.invokeMethod(DSL.Java:126)
at org.jenkinsci.plugins.workflow.cps.CpsScript.invokeMethod(CpsScript.Java:108)
at groovy.lang.GroovyObject$invokeMethod.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.Java:48)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.Java:113)
at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.Java:151)
at org.kohsuke.groovy.sandbox.GroovyInterceptor.onMethodCall(GroovyInterceptor.Java:21)
at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.Java:115)
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:16)
at WorkflowScript.run(WorkflowScript:93)
at ___cps.transform___(Native Method)
at com.cloudbees.groovy.cps.impl.ContinuationGroup.methodCall(ContinuationGroup.Java:57)
at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.dispatchOrArg(FunctionCallBlock.Java:109)
at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.fixArg(FunctionCallBlock.Java:82)
at Sun.reflect.GeneratedMethodAccessor501.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:33)
at org.jenkinsci.plugins.workflow.cps.SandboxContinuable$1.call(SandboxContinuable.Java:30)
at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.GroovySandbox.runInSandbox(GroovySandbox.Java:108)
at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.run0(SandboxContinuable.Java:30)
at org.jenkinsci.plugins.workflow.cps.CpsThread.runNextChunk(CpsThread.Java:163)
at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.run(CpsThreadGroup.Java:328)
at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.access$100(CpsThreadGroup.Java:80)
at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.Java:240)
at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.Java:228)
at org.jenkinsci.plugins.workflow.cps.CpsVmExecutorService$2.call(CpsVmExecutorService.Java:63)
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
8
wimnat

Nachdem ich mir die Protokolldatei genauer angesehen hatte, half es mir, das Problem aufzuspüren.

Es ist erwähnenswert, dass ich auf die Build-Phase geklickt habe, um die Protokolle anzuzeigen. Dies war es, was ich getan hatte. Als ich tatsächlich zur vollständigen Konsolenprotokollausgabe ging, sah ich den Fehler über:

Required context class hudson.FilePath is missing
Perhaps you forgot to surround the code with a step that provides this, such as: node

Unter dem Knoten {}, den ich hatte, hatte ich eine Anweisung für die Bereitstellung:

def branch = readFile('branch').trim()
if (branch == master) {
    ...
}

Das Problem war, dass die readFile-Anweisung außerhalb eines Knotens definiert wurde.

Die Antwort bestand darin, die readFile-Anweisung in einen Abschnitt {} eines Knotens zu setzen.

17
wimnat

Der Befehl sh wird am Ende nicht mit einem Anführungszeichen abgeschlossen.

2
Christopher

Ich weiß, das ist alt, aber ich bin mit einer deklarativen Pipeline auf ein ähnliches Problem gestoßen und hier gelandet. Wie sich herausstellte, habe ich versucht, eine sh zu verwenden, um eine environment-Variable innerhalb des pipeline-Blocks festzulegen, aber mein Haupt agent war none, d.h.

pipeline {
    agent none
    environment {
        VERSION = sh(returnStdout: true, script: 'git describe --tags')
    }
}

Dies führte zu demselben Fehler Required context class hudson.FilePath is missing. Das Verschieben nach stage mit agent funktionierte wie erwartet.

2
Saites

In meinem Fall hörte es plötzlich auf zu arbeiten, mit dem Fehler:

Required context class hudson.FilePath is missing
Perhaps you forgot to surround the code with a step that provides this, such as: node

Der Grund war, dass der Knoten einfach ausgefallen war. Musste es neu starten und seinen Agenten neu starten (es war Slave).

0
Reinherd

Ich hatte diesen Fehler:

Fehler beim Ausführen immer nach Bedingung: org.jenkinsci.plugins.workflow.steps.MissingContextVariableException: Erforderliche Kontextklasse hudson.FilePath fehlt
Vielleicht haben Sie vergessen, den Code mit einem Schritt zu umgeben, der dies ermöglicht, z. B .: node

Es wurde durch mehrdeutige Interpolation verursacht:

environment {
    FILE = "some-$BRANCH.yml"
}

Der richtige Ausdruck wäre in diesem Fall:

"some-${BRANCH}.yml"
0
x-yuri

meine Lösung für den Fehler Required context class hudson.FilePath is missing Perhaps you forgot to surround the code with a step that provides this, such as: node

ist:

#!/usr/bin/env groovy
import hudson.model.*

node('master') {
    sh("your Shell script")   
}
0
dsaydon