【问题标题】:Jenkins: read an existing job's plugin config via GroovyJenkins:通过 Groovy 读取现有作业的插件配置
【发布时间】:2017-10-18 17:49:58
【问题描述】:

我们正处于使用 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 中提取/保留的值是:

<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

不幸的是,虽然这确实返回了一些配置信息,但它没有返回插件信息。

然后,我们还尝试运行以下命令来读取/替换现有设置:

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");

【问题讨论】:

    标签: jenkins jenkins-plugins jenkins-groovy


    【解决方案1】:

    您是否尝试在“管理 Jenkins->配置全局安全”下禁用“为作业 DSL 脚本启用脚本安全”?

    【讨论】:

      【解决方案2】:

      如果要解析config.xml,使用

      def projectXml = new XmlSlurper().parseText("curl http://Server_Name:8100/job/Job_Name/config.xml");
      

      这应该返回您的原始 config.xml 数据

      【讨论】:

      • 尝试了您的命令,但出现错误。问题是,如果您查看我的原始帖子,我已经尝试使用 XmlSlurper def projectXml = new XmlSlurper().parseText("curl http://Server_Name:8100/job/Job_Name/api/xml".execute().text); 虽然这会从 config.xml 返回一些信息,但它不会返回我正在寻找的信息,即与插件设置
      • Job_name/api/xml 和 Job_Name/config.xml 返回 2 个非常不同的东西。 api/xml 返回 Job_name 页面的 api 端点,config.xml 是存储在您的 jenkins 服务器上的实际配置 xml。
      • 感谢您让我指出正确的方向。你是 100% 正确的。我从 Jenkins 脚本控制台运行:def projectXml = new XmlSlurper().parseText("curl http://Server_Name:8100/job/Job_Name/config.xml".execute().text); 我用你的提示更新了我上面的帖子,以及我如何使用它来解决我的问题
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多