如何以编程方式使用 java 获取 jenkins 中所有 projects/jobs 的列表?

How to get the list of all projects/jobs in jenkins using java programmatically?

我正在尝试访问 jenkins 中所有 jobs/projects 的列表及其在 java 而非 groovy 中的项目文件并解析 XML 文件。

我建议您使用其他方法而不是使用 Java。考虑使用 Ruby or Python API wrappers, Groovy, CLI API, Script Console etc. Refer also to Remote Access API 获取更多信息。

但是如果你还需要Java,好吧,没有JavaAPI,但是有RestAPI。例如,您可以使用某些 Java 的 http 客户端进行通信。以下是必需的步骤:

1。获取工作列表。

这可以通过请求 http://jenkins_url:port/api/json?tree=jobs[name,url] 来完成。

响应示例:

{
  "jobs" : [
    {
      "name" : "JOB_NAME1",
      "url" : "http://jenkins_url:port/job/JOB_NAME1/"
    },
    {
      "name" : "JOB_NAME2",
      "url" : "http://jenkins_url:port/job/JOB_NAME2/"
    },
    ...
  }

从那里您可以检索作业名称和 urls。

2。获取构建工件。

正在工作 url,从 job_url/lastSuccessfulBuild/artifact/*zip*/archive.zip

下载

3。或者获取工作区文件。

正在工作 url,从 job_url/JOB_NAME1/ws/*zip*/workspace.zip

下载

请注意,其中一些操作需要适当的 Jenkins 凭据和匿名访问。否则,请求将失败。

有关 Rest API 的更多详细信息可在您的 Jenkins 获得:http://jenkins_url:port/api/

就像@Vitalii 说的那样,最好用 groovy 或其他一些脚本语言来做,或者解析 api/xml 文件以获取工作区作业列表。

对于您的情况,您可以通过 class 扩展触发器并使用 class 触发器的作业对象来实现。

注意:包括 jenkins 插件所需的所有其他默认 classes 并确保插件每分钟运行一次以使此代码正确执行。

public class xyz extends Trigger<BuildableItem>
{
    @Override
    public void run()
    {       
       LOGGER.info("Project Name"+job.getName());        
    }
}