Jenkins:通过 Groovy 读取现有作业的插件配置
Jenkins: read an existing job's plugin config via Groovy
我们正处于使用 Jenkins DSL 的早期阶段。我们遇到的一个挑战是能够读取现有的作业插件设置,以便我们在 运行 DSL 之前保留它。这使我们能够让 Jenkins 用户选择保留他们的一些设置。我们已经成功地保留了作业的计划设置,但最新的挑战是能够保留插件设置。特别是 "ExtendedEmailPublisher" 插件中的设置。我们想保留值:
在 ExtendedEmailPublisher 标签中此作业的 config.xml 文件中,我们看到以下内容:
<publishers>
<hudson.plugins.emailext.ExtendedEmailPublisher>
<recipientList>Our_Team@Our_Team.com</recipientList>
<configuredTriggers>
<hudson.plugins.emailext.plugins.trigger.FailureTrigger>
<email>
<recipientList/>
<subject>$PROJECT_DEFAULT_SUBJECT</subject>
<body>$PROJECT_DEFAULT_CONTENT</body>
<recipientProviders>
<hudson.plugins.emailext.plugins.recipients.ListRecipientProvider/>
</recipientProviders>
<attachmentsPattern/>
<attachBuildLog>false</attachBuildLog>
<compressBuildLog>false</compressBuildLog>
<replyTo>$PROJECT_DEFAULT_REPLYTO</replyTo>
<contentType>project</contentType>
</email>
</hudson.plugins.emailext.plugins.trigger.FailureTrigger>
</configuredTriggers>
<contentType>default</contentType>
<defaultSubject>$DEFAULT_SUBJECT</defaultSubject>
<defaultContent>$DEFAULT_CONTENT</defaultContent>
<attachmentsPattern/>
<presendScript>$DEFAULT_PRESEND_SCRIPT</presendScript>
<classpath/>
<attachBuildLog>false</attachBuildLog>
<compressBuildLog>false</compressBuildLog>
<replyTo>$DEFAULT_REPLYTO</replyTo>
<saveOutput>false</saveOutput>
<disabled>false</disabled>
</hudson.plugins.emailext.ExtendedEmailPublisher>
</publishers>
我们希望从这个 XML 中 extract/preserve 的值是:
<disabled>false</disabled>
我们已尝试使用 groovy 获取现有值,但似乎无法找到正确的代码。我们的第一个想法是尝试使用 XmlSlurper 从 config.xml 中读取值。我们 运行 来自 Jenkins 脚本控制台的这个:
def projectXml = new XmlSlurper().parseText("curl http://Server_Name:8100/job/Job_Name/api/xml".execute().text);
*we use 8100 for our Jenkins port
不幸的是,虽然这会 return 一些配置信息,但它不会 return 插件信息。
然后,我们还尝试了 运行 以下 read/replace 现有设置:
def oldJob = hudson.model.Hudson.instance.getItem("Job_Name")
def isDisabled = false // Default Value
for(publisher in oldJob.publishersList) {
if (publisher instanceof hudson.plugins.emailext.ExtendedEmailPublisher) {
isDisabled = publisher.disabled
}
}
虽然这在从 Jenkins 脚本控制台执行时有效,但当我们尝试在 DSL 作业中使用它时,我们收到消息:
Processing provided DSL script
ERROR: startup failed:
script: 25: unable to resolve class
hudson.plugins.emailext.ExtendedEmailPublisher
@ line 25, column 37.
if (publisher instanceof hudson.plugins.emailext.ExtendedEmailPublisher)
{
1 error
Finished: FAILURE
解决方案更新:
使用 url @aflat 的 URL 建议获取原始 XML 配置信息,我能够使用 XML Slurper 然后使用 getProperty
方法将我想要的 属性 分配给一个变量。
def projectXml = new XmlSlurper().parseText("curl http://Server_Name:8100/job/Job_Name/config.xml".execute().text);
def emailDisabled = projectXml.publishers."hudson.plugins.emailext.ExtendedEmailPublisher".getProperty("disabled");
在 "Manage Jenkins->Configure Global Security" 下,您是否尝试禁用 "Enable script security for Job DSL scripts"?
如果要解析 config.xml,请使用
def projectXml = new XmlSlurper().parseText("curl http://Server_Name:8100/job/Job_Name/config.xml");
那应该 return 你的原始 config.xml 数据
我们正处于使用 Jenkins DSL 的早期阶段。我们遇到的一个挑战是能够读取现有的作业插件设置,以便我们在 运行 DSL 之前保留它。这使我们能够让 Jenkins 用户选择保留他们的一些设置。我们已经成功地保留了作业的计划设置,但最新的挑战是能够保留插件设置。特别是 "ExtendedEmailPublisher" 插件中的设置。我们想保留值:
在 ExtendedEmailPublisher 标签中此作业的 config.xml 文件中,我们看到以下内容:
<publishers>
<hudson.plugins.emailext.ExtendedEmailPublisher>
<recipientList>Our_Team@Our_Team.com</recipientList>
<configuredTriggers>
<hudson.plugins.emailext.plugins.trigger.FailureTrigger>
<email>
<recipientList/>
<subject>$PROJECT_DEFAULT_SUBJECT</subject>
<body>$PROJECT_DEFAULT_CONTENT</body>
<recipientProviders>
<hudson.plugins.emailext.plugins.recipients.ListRecipientProvider/>
</recipientProviders>
<attachmentsPattern/>
<attachBuildLog>false</attachBuildLog>
<compressBuildLog>false</compressBuildLog>
<replyTo>$PROJECT_DEFAULT_REPLYTO</replyTo>
<contentType>project</contentType>
</email>
</hudson.plugins.emailext.plugins.trigger.FailureTrigger>
</configuredTriggers>
<contentType>default</contentType>
<defaultSubject>$DEFAULT_SUBJECT</defaultSubject>
<defaultContent>$DEFAULT_CONTENT</defaultContent>
<attachmentsPattern/>
<presendScript>$DEFAULT_PRESEND_SCRIPT</presendScript>
<classpath/>
<attachBuildLog>false</attachBuildLog>
<compressBuildLog>false</compressBuildLog>
<replyTo>$DEFAULT_REPLYTO</replyTo>
<saveOutput>false</saveOutput>
<disabled>false</disabled>
</hudson.plugins.emailext.ExtendedEmailPublisher>
</publishers>
我们希望从这个 XML 中 extract/preserve 的值是:
<disabled>false</disabled>
我们已尝试使用 groovy 获取现有值,但似乎无法找到正确的代码。我们的第一个想法是尝试使用 XmlSlurper 从 config.xml 中读取值。我们 运行 来自 Jenkins 脚本控制台的这个:
def projectXml = new XmlSlurper().parseText("curl http://Server_Name:8100/job/Job_Name/api/xml".execute().text);
*we use 8100 for our Jenkins port
不幸的是,虽然这会 return 一些配置信息,但它不会 return 插件信息。
然后,我们还尝试了 运行 以下 read/replace 现有设置:
def oldJob = hudson.model.Hudson.instance.getItem("Job_Name")
def isDisabled = false // Default Value
for(publisher in oldJob.publishersList) {
if (publisher instanceof hudson.plugins.emailext.ExtendedEmailPublisher) {
isDisabled = publisher.disabled
}
}
虽然这在从 Jenkins 脚本控制台执行时有效,但当我们尝试在 DSL 作业中使用它时,我们收到消息:
Processing provided DSL script
ERROR: startup failed:
script: 25: unable to resolve class
hudson.plugins.emailext.ExtendedEmailPublisher
@ line 25, column 37.
if (publisher instanceof hudson.plugins.emailext.ExtendedEmailPublisher)
{
1 error
Finished: FAILURE
解决方案更新:
使用 url @aflat 的 URL 建议获取原始 XML 配置信息,我能够使用 XML Slurper 然后使用 getProperty
方法将我想要的 属性 分配给一个变量。
def projectXml = new XmlSlurper().parseText("curl http://Server_Name:8100/job/Job_Name/config.xml".execute().text);
def emailDisabled = projectXml.publishers."hudson.plugins.emailext.ExtendedEmailPublisher".getProperty("disabled");
在 "Manage Jenkins->Configure Global Security" 下,您是否尝试禁用 "Enable script security for Job DSL scripts"?
如果要解析 config.xml,请使用
def projectXml = new XmlSlurper().parseText("curl http://Server_Name:8100/job/Job_Name/config.xml");
那应该 return 你的原始 config.xml 数据