获取通过 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
部分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