1. 概述

Jenkins 提供了一组远程访问 API 和接口,用户可以通过这些接口获取信息、触发构建以及配置新任务。其中,获取特定构建状态是这些 API 的常见使用场景之一。

在本教程中,我们将介绍如何通过 Jenkins 提供的接口获取某个 Job 的最近一次成功构建信息。

2. 使用 curl 获取最近一次成功构建

获取 Jenkins 构建信息最简单的方法之一是使用 curl 命令。curl 是一个命令行工具,支持通过 HTTP 等常见协议传输数据,大多数 Linux 系统默认都已安装。因此,我们可以直接在 Linux 机器上使用 curl 向 Jenkins 的 REST API 发起请求。

向 Jenkins API 发送请求时需要进行身份认证。在使用 curl 命令前,我们需要先为 Jenkins 用户生成一个 API token。操作方式是:进入 Jenkins UI 页面,找到用户面板,生成 API token:

Create Jenkins API token

拿到 token 后,我们就可以在 curl 命令中使用它了。要获取某个 job 的最近一次成功构建信息,可以访问如下格式的接口:

http://<jenkins-host>:<port>/job/<jobName>/lastSuccessfulBuild/buildNumber

示例命令如下:

$ curl --user user:1111111111111111111111111111111111 http://localhost:8080/job/test-job/lastSuccessfulBuild/buildNumber
1

上面命令中,我们使用 --user 参数传入用户名和 API token。因为 Jenkins 安装在同一台机器上,所以使用了 localhost 和默认端口 8080。最后通过 /job/test-job/lastSuccessfulBuild/buildNumber 接口获取了该 job 的最近成功构建号。

我们可以通过 Jenkins UI 界面验证结果:

Get Jenkins build status

可以看到,job 的最近一次成功构建号是 #1,与 curl 命令的输出一致。

我们还可以通过替换接口路径来获取最近一次构建和最近一次失败构建的信息:

$ curl --user user:1111111111111111111111111111111111 http://localhost:8080/job/test-job/lastBuild/buildNumber
3
$ curl --user user:1111111111111111111111111111111111 http://localhost:8080/job/test-job/lastFailedBuild/buildNumber
2

在这个例子中,我们将 URL 中的 lastSuccessfulBuild 替换为 lastBuildlastFailedBuild,返回的构建号与 Jenkins UI 显示一致。

3. 使用 Jenkins Pipeline 获取最近一次成功构建

如果你不想直接使用原始 REST API,也可以通过其他方式获取 Jenkins 的构建信息。例如,可以在 Jenkins Pipeline 中使用 Groovy 脚本调用 Jenkins 提供的类库来获取相关信息。

一个常见做法是在 Pipeline 中使用 Jenkins.model.Jenkins 类的相关方法来获取 job 的构建状态信息。我们来看一个示例:

pipeline {    
    agent any     
    stages {
        stage("get build status"){            
            steps {                
                script {                    
                    def jobName = Jenkins.instance.getItem("test-job")
                    echo "${jobName.getLastSuccessfulBuild()}"
                    echo "${jobName.getLastFailedBuild()}"
                    echo "${jobName.getLastBuild()}"
                }
            }
        }
    }
}

在这个示例中,我们创建了一个 Pipeline 脚本,用于获取 test-job 的不同构建状态。其中:

  • Jenkins.instance.getItem("test-job")Jenkins.model.Jenkins 类的一个方法,用于获取指定 job 的对象。
  • 然后我们通过调用该 job 对象的 getLastSuccessfulBuild()getLastFailedBuild()getLastBuild() 方法,分别获取其对应状态的构建信息。

执行该 Pipeline 后输出如下:

Get Build Status Using Pipeline

可以看到,Pipeline 输出了 test-job 各个构建状态对应的构建号。与前面 curl 命令或 Jenkins UI 界面显示的结果一致。

4. 小结 ✅

本文介绍了如何获取 Jenkins job 的最近一次成功构建状态。Jenkins 提供了 REST API 接口供远程访问,可以直接使用 curl 命令调用,也可以通过 Jenkins Pipeline 脚本调用内置的 Groovy 类库来实现。

  • curl 示例:适合快速获取信息或集成到脚本中。
  • Pipeline 示例:适合在 Jenkins 内部自动化流程中使用,可扩展性强。

无论哪种方式,都可以根据实际场景灵活选用。如果你在实际使用中遇到权限、接口路径错误等问题,建议检查 Jenkins 用户权限和 job 名称是否正确拼写。


原始标题:Get Last Successful Build Status in Jenkins