jenkins 获取通过job-dsl创建的作业列表和手动作业列表

esbemjvw  于 2022-11-01  发布在  Jenkins
关注(0)|答案(3)|浏览(142)

部分作业是通过job-dsl生成的,但仍有部分作业是通过手动创建的。如果Jenkins有一个机制或api来获取所有手动作业的列表。
我看到通过job-dsl的所有作业都有一个标记,是哪个作业创建了它们(种子作业)。也许已经收到了所有生成的作业的列表,你可以把所有作业的列表和淘汰手动...

5rgfhyps

5rgfhyps1#

JobDSL将有关生成的作业的信息保存在javaposse.jobdsl.plugin.ExecuteDslScripts.xml文件中,例如:

<?xml version='1.1' encoding='UTF-8'?>
<javaposse.jobdsl.plugin.DescriptorImpl plugin="job-dsl@1.77">
  <templateJobMap class="com.google.common.collect.HashMultimap" serialization="custom">
    <com.google.common.collect.HashMultimap>
      <default/>
      <int>8</int>
      <int>0</int>
    </com.google.common.collect.HashMultimap>
  </templateJobMap>
  <generatedJobMap class="concurrent-hash-map">
    <entry>
      <string>generated-job-name1</string>
      <javaposse.jobdsl.plugin.SeedReference>
        <seedJobName>job-which-created-it</seedJobName>
        <digest>hash1</digest>
      </javaposse.jobdsl.plugin.SeedReference>
    </entry>
    <entry>
      <string>generated-job-name2</string>
      <javaposse.jobdsl.plugin.SeedReference>
        <seedJobName>job-which-created-it</seedJobName>
        <digest>hash2</digest>
      </javaposse.jobdsl.plugin.SeedReference>
    </entry>
    ...
  </generatedJobMap>
</javaposse.jobdsl.plugin.DescriptorImpl>

如果您解析文件并收集所有javaposse.jobdsl.plugin.DescriptorImpl/generatedJobMap/entry/string值,则会得到所有生成作业的列表。
接下来,您可以通过使用Jenkins.get().getItems()获取所有作业,收集所有名称,并在最后删除在javaposse.jobdsl.plugin.ExecuteDslScripts.xml文件中找到的名称。
编辑:
该文件保存了javaposse.jobdsl.plugin.DescriptorImpl类的XML表示形式。您也可以通过编程方式获取它:获取类的描述符。

def jenkins = Jenkins.get()
def clazz = Class.forName('javaposse.jobdsl.plugin.DescriptorImpl', true, jenkins.pluginManager.uberClassLoader)
def descriptor = jenkins.getDescriptorByType(clazz)
descriptor.generatedJobMap // map with listed previously entries
wi3ka0sx

wi3ka0sx2#

我找到了使用脚本控制台的方法!

TL;DR:

Jenkins.instance.jobNames.findAll {
    job = Jenkins.instance.getItemByFullName(it)
    a = job.getAction(javaposse.jobdsl.plugin.actions.SeedJobAction.class)
    return a?.isConfigChanged()
}.each {
    println it
}

说明

这需要一些挖掘(我不知道我在做什么;也许有一个简单的方法)。我注意到我所寻找的所有信息都可以在工作的“首页”上找到。这里的信息可以通过插件添加。在JobDsl代码中搜索字符串“Seed job:“后,我找到了this file,它是一个Jelly文件。经过一些猜测,我找到了上面的代码。
a对象有获取器,用于获取通过Jelly文件中的it对象访问的信息,例如getSeedJob()。要检查配置是否更改,请使用is作为前缀,而不是get,可能是因为它返回一个布尔值。如果anull,则它不是由种子作业生成的。

v1uwarro

v1uwarro3#

如果要自动执行以下操作:Jenkins有一个详细的rest api,您可以在其中获取有关作业等的信息。您将获得JSON对象,然后需要对其进行解释。https://www.jenkins.io/doc/book/using/remote-access-api/
要检查Api是否提供了您需要的信息,您可以使用http://jenkins:8080/job/yourjob/api/json?pretty=true

相关问题