Version Jenkins = 2.19 Version du plugin Jenkins Multibranch Pipeline = 2.92
J'ai un Jenkinsfile avec quelques étapes conditionnelles basées sur la branche.
Voici une version modifiée par souci de brièveté de mon 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'
}
}
}
J'utilise le plugin de pipeline multibranches.
Il détecte et construit avec succès toutes mes branches.
Le problème que j'ai est que toutes les constructions rapportent comme ayant échoué même si, si je survole chaque étape, cela signale le succès.
J'ai joint une image illustrant une branche de fonctionnalité dans laquelle les deux étapes que je voulais exécuter ont été exécutées et se sont terminées avec succès, mais vous pouvez voir que la construction a en fait été signalée comme ayant échoué.
J'obtiens également le même résultat pour la branche de développement: elle exécute l'étape Docker avec succès, mais les rapports de génération ont échoué.
Je m'attends à ce que chaque branche fasse état de son succès lorsque toutes les étapes exécutées pour cette branche ont été réussies.
EDIT 1
Voici la fin du journal de construction (j'espère que c'est suffisant car je ne voulais pas extraire toutes les informations privées, mais laissez-moi savoir si nécessaire)
[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
Ainsi, après avoir examiné de plus près le fichier journal, cela m'a aidé à cerner le problème.
Il est intéressant de noter que cliquer sur l’étape de construction pour afficher les journaux est ce qui m’a jeté - c’est ce que je faisais. Quand je suis effectivement allé à la sortie du journal de la console complète, j'ai vu l'erreur à propos de:
Required context class hudson.FilePath is missing
Perhaps you forgot to surround the code with a step that provides this, such as: node
Sous la section de nœud {} que j'avais, j'avais une instruction pour deploys:
def branch = readFile('branch').trim()
if (branch == master) {
...
}
Le problème était que l'instruction readFile était définie en dehors d'un nœud.
La réponse était de placer l’instruction readFile dans une section {} du nœud.
La commande sh
n'est pas fermée avec une citation à la fin.
Je sais que c'est vieux, mais j'ai rencontré un problème similaire avec un pipeline déclaratif et ai atterri ici. Il s’est avéré que j’essayais d’utiliser sh
pour définir une variable environment
dans le bloc pipeline
, mais ma agent
principale était none
, c’est-à-dire:
pipeline {
agent none
environment {
VERSION = sh(returnStdout: true, script: 'git describe --tags')
}
}
Cela a entraîné la même erreur Required context class hudson.FilePath is missing
. Le déplacer dans une stage
avec une agent
a fonctionné comme prévu.
Dans mon cas, cela a soudainement cessé de fonctionner, avec l'erreur suivante:
Required context class hudson.FilePath is missing
Perhaps you forgot to surround the code with a step that provides this, such as: node
La raison était que le nœud était simplement en panne. Il a fallu le redémarrer et relancer son agent (c'était esclave).
ma solution pour l'erreur Required context class hudson.FilePath is missing
Perhaps you forgot to surround the code with a step that provides this, such as: node
est:
#!/usr/bin/env groovy
import hudson.model.*
node('master') {
sh("your Shell script")
}