2017-02-22 50 views
1

詹金斯版本= 2.19 詹金斯多枝流水线插件版本= 2.92詹金斯管道有条件的阶段成功,但詹金斯表明打造为失败

我有一个Jenkinsfile基于分支少数有条件的阶段。

下面是一个修改的我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' 
     } 
    } 
} 

我现在用的多分支管道插件。

它成功检测并构建了我的所有分支机构。

我遇到的问题是,所有构建报告都失败了,即使我在每个阶段悬停报告“成功”。

我附上了一张图片,显示我想要运行的两个阶段已经运行并完成成功的功能分支,但您可以看到该构建实际报告为失败。

Jenkins failed build

我得到发展的分支以及完全相同的结果 - 它成功地执行泊坞阶段,但生成报告失败。

我的期望是每个分支都会报告成功,因为该分支运行的阶段都已通过。

编辑1

这里的生成日志的末尾(我希望这是足够的,因为我不想挑出所有的私人信息,但让我知道,如果需要的话)

[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 
+0

你能告诉我们什么在生成日志? –

回答

5

因此,仔细观察日志文件后,它帮助我追踪了这个问题。

值得注意的是,单击构建阶段来查看日志是什么扔我 - 这是我一直在做。当我真正到了全控制台日志输出我看到了有关的错误:

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

下的节点{}部分,我有我有部署了一个声明:

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

的问题是, readFile语句是在节点之外定义的。

答案是将readFile语句放在节点{}部分中。

+0

这必须在节点的上下文中执行的事实是一个非常重要的细节。这就是让我绊倒的原因。 – Brandon

1

sh命令最后没有用引号关闭。

+0

谢谢你指出。这只是我的SO帖子中的一个错字,尽管不在Jenkins文件本身中 – wimnat