首页
学习
活动
专区
圈层
工具
发布

在Jenkins文件中获取Jenkins Pipeline lastBuild结果

在Jenkins文件中获取Pipeline lastBuild结果

基础概念

Jenkins Pipeline的lastBuild是指当前作业(job)最后一次构建的执行结果和相关信息。通过获取lastBuild,可以查询到上一次构建的状态、持续时间、变更集等有用信息。

获取lastBuild的方法

在Jenkins Pipeline脚本(Groovy)中,可以通过以下几种方式获取lastBuild信息:

1. 通过currentBuild获取上一个构建

代码语言:txt
复制
pipeline {
    agent any
    stages {
        stage('Get Last Build') {
            steps {
                script {
                    // 获取当前构建的上一个构建
                    def lastBuild = currentBuild.getPreviousBuild()
                    
                    if (lastBuild) {
                        echo "Last build result: ${lastBuild.result}"
                        echo "Last build number: ${lastBuild.number}"
                        echo "Last build duration: ${lastBuild.durationString}"
                    } else {
                        echo "No previous build found"
                    }
                }
            }
        }
    }
}

2. 通过Jenkins实例获取特定作业的上次构建

代码语言:txt
复制
pipeline {
    agent any
    stages {
        stage('Get Job Last Build') {
            steps {
                script {
                    // 获取特定作业的上次构建
                    def jobName = 'your-job-name'
                    def job = Jenkins.instance.getItemByFullName(jobName)
                    
                    if (job) {
                        def lastBuild = job.getLastBuild()
                        echo "Last build of ${jobName}: ${lastBuild.number}"
                        echo "Result: ${lastBuild.result}"
                    } else {
                        echo "Job ${jobName} not found"
                    }
                }
            }
        }
    }
}

常用lastBuild属性和方法

| 属性/方法 | 描述 | 示例 | |----------|------|------| | number | 构建号 | lastBuild.number | | result | 构建结果(SUCCESS, FAILURE等) | lastBuild.result | | durationString | 构建持续时间 | lastBuild.durationString | | getChangeSets() | 获取变更集 | lastBuild.changeSets | | getBuildVariables() | 获取构建变量 | lastBuild.buildVariables | | getLog() | 获取构建日志 | lastBuild.getLog() |

实际应用场景

  1. 构建失败后发送通知
代码语言:txt
复制
post {
    failure {
        script {
            def lastBuild = currentBuild.getPreviousBuild()
            if (lastBuild && lastBuild.result == 'SUCCESS') {
                // 发送通知,说明从成功变为失败
                emailext body: "Build ${currentBuild.number} failed after previous success", 
                         subject: "Build Failure", 
                         to: 'team@example.com'
            }
        }
    }
}
  1. 跳过重复构建
代码语言:txt
复制
pipeline {
    agent any
    stages {
        stage('Check Last Build') {
            steps {
                script {
                    def lastBuild = currentBuild.getPreviousBuild()
                    if (lastBuild && lastBuild.result == 'SUCCESS') {
                        def changes = lastBuild.changeSets
                        if (changes.isEmpty()) {
                            currentBuild.result = 'ABORTED'
                            error('No changes since last successful build')
                        }
                    }
                }
            }
        }
        // 其他阶段...
    }
}
  1. 获取上次构建的测试结果
代码语言:txt
复制
stage('Compare Test Results') {
    steps {
        script {
            def lastBuild = currentBuild.getPreviousBuild()
            if (lastBuild) {
                def currentResults = getTestResults()
                def lastResults = lastBuild.getAction(hudson.tasks.junit.TestResultAction.class)
                
                if (lastResults) {
                    echo "Current failures: ${currentResults.failCount}"
                    echo "Last failures: ${lastResults.failCount}"
                }
            }
        }
    }
}

注意事项

  1. 使用Jenkins.instance需要管理员权限,在Jenkins安全设置中可能需要授权
  2. 对于大型Jenkins实例,频繁查询构建历史可能影响性能
  3. lastBuild可能为null(如第一次构建时)
  4. 在多分支Pipeline中,需要注意分支上下文

通过合理使用lastBuild信息,可以实现更智能的Pipeline逻辑,如构建跳过、结果比较、通知优化等。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的文章

领券