通过管道脚本生成吸引力报告时,hudson.FilePath丢失错误

时间:2019-01-24 09:53:57

标签: python jenkins allure

我在管道中添加了新的阶段:

stage('reports') {
    steps {
    script {
            allure([
                    includeProperties: false,
                    jdk: '',
                    properties: [],
                    reportBuildPolicy: 'ALWAYS',
                    results: [[path: 'target/allure-results']]
            ])
        }
    }
}

但是作业失败,并显示错误:

hudson.remoting.ProxyException: org.jenkinsci.plugins.workflow.steps.MissingContextVariableException: Required context class hudson.FilePath is missing
    at org.jenkinsci.plugins.workflow.steps.StepDescriptor.checkContextAvailability(StepDescriptor.java:260)
    at org.jenkinsci.plugins.workflow.cps.DSL.invokeStep(DSL.java:262)
Caused: hudson.remoting.ProxyException: org.codehaus.groovy.runtime.InvokerInvocationException: org.jenkinsci.plugins.workflow.steps.MissingContextVariableException: Required context class hudson.FilePath is missing

测试是在生成的Python和xml报告上编写的,但不是诱人的报告。

您能帮我解决错误吗?

1 个答案:

答案 0 :(得分:0)

如我所见,您使用declarative pipeline syntax。在这种情况下,您需要定义agent部分。根据官方文档:

  

在管道的顶层定义agent none可确保不会不必要地分配执行程序。使用agent none还会强制每个stage部分包含其自己的agent部分。

因此,我认为您在管道的顶级使用agent none,这就是为什么您需要在舞台内添加agent部分的原因。像这样:

pipeline {
    agent none 
    stages {
        stage('reports') {
            agent { docker 'openjdk:8-jre' }
            steps {
                script {
                    allure([
                        includeProperties: false,
                        jdk: '',
                        properties: [],
                        reportBuildPolicy: 'ALWAYS',
                        results: [[path: 'target/allure-results']]
                    ])
                }
            }
        }
    }
}

对于scripted pipeline,您需要使用以下语法(有关更多详细信息,请参见魅力documentation):

node {
// script body

allure([
         includeProperties: false,
         jdk: '',
         properties: [[key: 'allure.issues.tracker.pattern', value: 'http://tracker.company.com/%s']],
         reportBuildPolicy: 'ALWAYS',
         results: [[path: 'target/allure-results'], [path: 'other_target/allure-results']]
         ])
}