Jenkins 未找到此类字段:访问cppcheck插件类时字段java.lang.String输入错误
]我是一名试图了解詹金斯的初级开发人员,我已经自学了几个月了。目前我有一个管道(仅用于学习目的),它在文件夹上运行静态分析,然后发布,我已经能够使用jelly模板通过电子邮件发送报告,从那时起,我意识到可以实例化插件的类来使用它的方法,所以我去了cppcheck,做了一些尝试和错误,这样我可以得到我报告的一些值,然后用它们做一些其他的事情,所以我在管道中做了类似的事情:Jenkins 未找到此类字段:访问cppcheck插件类时字段java.lang.String输入错误,jenkins,groovy,jenkins-pipeline,Jenkins,Groovy,Jenkins Pipeline,]我是一名试图了解詹金斯的初级开发人员,我已经自学了几个月了。目前我有一个管道(仅用于学习目的),它在文件夹上运行静态分析,然后发布,我已经能够使用jelly模板通过电子邮件发送报告,从那时起,我意识到可以实例化插件的类来使用它的方法,所以我去了cppcheck,做了一些尝试和错误,这样我可以得到我报告的一些值,然后用它们做一些其他的事情,所以我在管道中做了类似的事情: pipeline { agent any stages { stage('analysis'
pipeline {
agent any
stages {
stage('analysis') {
steps {
script{
bat'cppcheck "E:/My_project/Source/" --xml --xml-version=2 . 2> cppcheck.xml'
}
}
}
stage('Test'){
steps {
script {
publishCppcheck pattern:'cppcheck.xml'
for (action in currentBuild.rawBuild.getActions()) {
def name = action.getClass().getName()
if (name == 'org.jenkinsci.plugins.cppcheck.CppcheckBuildAction') {
def cppcheckaction = action
def totalErrors = cppcheckaction.getResult().report.getNumberTotal()
println totalErrors
def warnings = cppcheckaction.getResult().statistics.getNumberWarningSeverity()
println warnings
}
}
}
}
}
}
}
def nueva = cppcheckaction.getResult().diffState.valueOf(NEW)
println nueva
哪个输出是:
[Pipeline] echo
102
[Pipeline] echo
4
我的逻辑(错误地)告诉我,如果我可以访问报表
和统计
类,并分别使用它们的方法getNumberTotal()
和getNumberWarningSeverity()
,因此,我也应该能够以相同的方式访问DiffState
类,并使用valueOf()
方法获取新错误的枚举。但将此添加到我的管道中:
pipeline {
agent any
stages {
stage('analysis') {
steps {
script{
bat'cppcheck "E:/My_project/Source/" --xml --xml-version=2 . 2> cppcheck.xml'
}
}
}
stage('Test'){
steps {
script {
publishCppcheck pattern:'cppcheck.xml'
for (action in currentBuild.rawBuild.getActions()) {
def name = action.getClass().getName()
if (name == 'org.jenkinsci.plugins.cppcheck.CppcheckBuildAction') {
def cppcheckaction = action
def totalErrors = cppcheckaction.getResult().report.getNumberTotal()
println totalErrors
def warnings = cppcheckaction.getResult().statistics.getNumberWarningSeverity()
println warnings
}
}
}
}
}
}
}
def nueva = cppcheckaction.getResult().diffState.valueOf(NEW)
println nueva
给我一个错误:
org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: No such field found: field org.jenkinsci.plugins.cppcheck.CppcheckBuildAction diffState
at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.unclassifiedField(SandboxInterceptor.java:425)
at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onGetProperty(SandboxInterceptor.java:409)
...
我可以在中看到,有一个diffState
类带有valueOf()
方法,但是我无法访问它。是否有其他方法可以获取上一次生成和当前生成之间的新错误?
我发现有两个问题可能导致这种情况:
CppcheckResult
没有成员变量diffState
,因此您无法访问它private CppcheckReport report;
public CppcheckStatistics getReport()
及
diffState
没有成员(和getter方法),因此可以尝试调用:
/**
* Get differences between current and previous statistics.
*
* @return the differences
*/
public CppcheckStatistics getDiff(){
我的建议:cppcheckaction.getResult().getDiff().valueOf(新)
。此外,它还有一个方法getDiffState()
Jenkins settings-Script Approval-Approve您被阻止的方法thx用于回答,我之前已经尝试了
cppcheckaction.getResult().getDiff().valueOf(NEW)
,我得到了groovy.lang.MissingPropertyException:没有这样的属性:新的类:groovy.lang.Binding
,关于脚本批准,我也这样做了,因为其他方法也需要一些批准。我一直在检查CppcheckWorkspaceFile
,但由于我从未使用过Java,而且没有什么经验,我不知道如何在管道中访问它……您能举一个示例,说明管道中getDiffState
的stntax是如何使用的吗?提前感谢,我还用我在javadoc中看到的CppcheckDiffState
类和valueOf()
方法的图像更新了主要问题