我是groovy剧本的新手。我有jenkins工作,其中groovy用于管道。
我试图使用XmlSlurper类读取XML文件并在其中捕获所需的信息,以便我可以将它们提供给下一个命令。
我能够捕获信息,但是当我尝试将捕获的值输入到基于其提供的值运行的下一个命令时,它会抛出错误。以下是详细信息,
我的常规剧本:
env.WORKSPACE = pwd()
def setting = readFile "${env.WORKSPACE}/settings.xml"
def pkgXml = new XmlSlurper().parseText(setting)
def hostUrl = pkgXml.profiles.profile[0].properties['sonar.host.url']
sh("node_modules/sonar-scanner/bin/sonar-scanner scan -e -Dsonar.host.url="+hostUrl+" -Dsonar.language=js '-Dsonar.projectName=Test angular project analyzed with the SonarQube Runner' -Dsonar.projectVersion=1.0 -Dsonar.sourceEncoding=UTF-8 -Dsonar.projectKey=testpipeline_02 -Dsonar.sources=src -Dsonar.projectBaseDir=/base/dir/ -Dsonar.buildbreaker.skip=true")
错误讯息:
[BFA] Done. 0s
an exception which occurred:
in field locals
in field caller
in field e
in field program
in field threads
in object org.jenkinsci.plugins.workflow.cps.CpsThreadGroup@2ff2da03
Caused: java.io.NotSerializableException: groovy.util.slurpersupport.NodeChild
at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:860)
我希望将从XmlSlurper捕获的值传递给声纳扫描仪命令。
提前感谢并期待解决。
答案 0 :(得分:0)
我猜pkgXml.profiles.profile[0].properties['sonar.host.url']
没有返回属性值,而是一个无法序列化的对象。您是否尝试过以下方法:
def hostUrl = pkgXml.profiles.profile[0].getProperty('sonar.host.url')