Jenkins Pipeline的lastBuild
是指当前作业(job)最后一次构建的执行结果和相关信息。通过获取lastBuild
,可以查询到上一次构建的状态、持续时间、变更集等有用信息。
在Jenkins Pipeline脚本(Groovy)中,可以通过以下几种方式获取lastBuild信息:
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"
}
}
}
}
}
}
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"
}
}
}
}
}
}
| 属性/方法 | 描述 | 示例 |
|----------|------|------|
| number
| 构建号 | lastBuild.number
|
| result
| 构建结果(SUCCESS, FAILURE等) | lastBuild.result
|
| durationString
| 构建持续时间 | lastBuild.durationString
|
| getChangeSets()
| 获取变更集 | lastBuild.changeSets
|
| getBuildVariables()
| 获取构建变量 | lastBuild.buildVariables
|
| getLog()
| 获取构建日志 | lastBuild.getLog()
|
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'
}
}
}
}
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')
}
}
}
}
}
// 其他阶段...
}
}
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}"
}
}
}
}
}
Jenkins.instance
需要管理员权限,在Jenkins安全设置中可能需要授权lastBuild
可能为null(如第一次构建时)通过合理使用lastBuild信息,可以实现更智能的Pipeline逻辑,如构建跳过、结果比较、通知优化等。
没有搜到相关的文章