如何在Jenkins中阻止与上次成功提交相同的重复构建?
实现方案:相同提交时阻止Jenkins构建
当然可以实现这个需求,核心就是在Jenkinsfile里对比当前构建和上次成功构建的提交ID,一致就终止构建。下面是具体的配置代码和细节说明:
完整Jenkinsfile代码
pipeline { agent any stages { stage('校验提交是否重复') { steps { script { // 获取当前构建的提交ID def currentCommit = sh( script: 'git rev-parse HEAD', returnStdout: true ).trim() // 获取上次成功构建的提交ID(如果存在) def lastSuccessCommit = null if (currentBuild.previousSuccessfulBuild) { lastSuccessCommit = sh( script: "git rev-parse ${currentBuild.previousSuccessfulBuild.revision}", returnStdout: true ).trim() } // 对比判断,重复则终止构建 if (lastSuccessCommit && currentCommit == lastSuccessCommit) { error('当前提交和上次成功构建的提交完全一致,终止本次构建') } else { echo '检测到新提交,继续执行构建流程' } } } } // 这里放置你原本的构建阶段 stage('正式构建') { steps { echo '执行编译、打包等任务...' } } } }
关键细节解释
currentBuild.previousSuccessfulBuild:Jenkins内置对象,指向最近一次成功完成的构建。如果是项目第一次构建,这个值为null,此时不会触发终止逻辑,允许正常执行。git rev-parse HEAD:通过git命令直接获取当前构建对应的提交哈希,比依赖环境变量更可靠(部分场景下环境变量可能未正确设置)。error():抛出该错误会直接终止构建,并标记构建为失败状态,完全实现“阻止构建执行”的需求。- 手动构建也生效:该校验阶段会在所有构建触发方式下执行,包括手动点击“立即构建”,满足你对手动构建的限制要求。
简化写法(可选)
如果你的流水线是多分支类型,Jenkins会自动设置env.GIT_COMMIT环境变量,直接使用它即可获取当前提交ID,代码可简化为:
def currentCommit = env.GIT_COMMIT.trim()
内容的提问来源于stack exchange,提问作者Alexy Pulivelil
相关产品推荐
相关产品推荐

