部分作业是通过job-dsl生成的,但仍有部分作业是通过手动创建的。如果Jenkins有一个机制或api来获取所有手动作业的列表。我看到通过job-dsl的所有作业都有一个标记,是哪个作业创建了它们(种子作业)。也许已经收到了所有生成的作业的列表,你可以把所有作业的列表和淘汰手动...
5rgfhyps1#
JobDSL将有关生成的作业的信息保存在javaposse.jobdsl.plugin.ExecuteDslScripts.xml文件中,例如:
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表示形式。您也可以通过编程方式获取它:获取类的描述符。
javaposse.jobdsl.plugin.DescriptorImpl/generatedJobMap/entry/string
javaposse.jobdsl.plugin.DescriptorImpl
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
wi3ka0sx2#
我找到了使用脚本控制台的方法!
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,可能是因为它返回一个布尔值。如果a是null,则它不是由种子作业生成的。
a
it
getSeedJob()
is
get
null
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
3条答案
按热度按时间5rgfhyps1#
JobDSL将有关生成的作业的信息保存在
javaposse.jobdsl.plugin.ExecuteDslScripts.xml
文件中,例如:如果您解析文件并收集所有
javaposse.jobdsl.plugin.DescriptorImpl/generatedJobMap/entry/string
值,则会得到所有生成作业的列表。接下来,您可以通过使用Jenkins.get().getItems()获取所有作业,收集所有名称,并在最后删除在
javaposse.jobdsl.plugin.ExecuteDslScripts.xml
文件中找到的名称。编辑:
该文件保存了
javaposse.jobdsl.plugin.DescriptorImpl
类的XML表示形式。您也可以通过编程方式获取它:获取类的描述符。wi3ka0sx2#
我找到了使用脚本控制台的方法!
TL;DR:
说明
这需要一些挖掘(我不知道我在做什么;也许有一个简单的方法)。我注意到我所寻找的所有信息都可以在工作的“首页”上找到。这里的信息可以通过插件添加。在JobDsl代码中搜索字符串“Seed job:“后,我找到了this file,它是一个Jelly文件。经过一些猜测,我找到了上面的代码。
a
对象有获取器,用于获取通过Jelly文件中的it
对象访问的信息,例如getSeedJob()
。要检查配置是否更改,请使用is
作为前缀,而不是get
,可能是因为它返回一个布尔值。如果a
是null
,则它不是由种子作业生成的。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