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

Get list of jobs which created via job-dsl and list of manual jobs

部分job是通过job-dsl生成的,但仍有部分job是手动创建的。如果 Jenkins 有一种机制或 api 来获取所有手动作业的列表。

我看到通过 job-dsl 的所有作业都有一个标记是哪个作业创建了它们(种子作业)。也许收到所有生成的列表后,您可以获取所有作业的列表并剔除手动 ...

如果您想自动化:Jenkins 有一个详细的休息 api,您可以在其中获取有关工作等的信息。您将获得 JSON 对象,然后需要对其进行解释。 https://www.jenkins.io/doc/book/using/remote-access-api/

要检查 Api 是否提供了您需要的信息,您可以使用 http://jenkins:8080/job/yourjob/api/json?pretty=true

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 class 的 XML 表示。您也可以通过编程方式获取它:Jenkins.get().getDescriptorByType(Class<?> type).

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