You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins分支无新提交时复用旧构建的实现需求

实现Jenkins流水线无新提交时跳过构建复用结果

以下是针对你的需求修改后的流水线配置,核心思路是对比当前分支最新提交与上一次成功构建的提交哈希,一致则跳过构建并复用历史产物,不一致则执行完整构建:

pipeline {
    agent {
        label 'jenkins-agent'
    }

    stages {
        stage('Initialize') {
            steps {
                script {
                    def mvn = tool name: 'Maven'
                    def jdk = tool name: 'openjdk-11'
                    env.JAVA_HOME = "${jdk}/amazon-corretto-11.0.18.10.1-linux-x64"
                    env.PATH = "${env.JAVA_HOME}/bin:${mvn}/bin:${env.PATH}"
                    sh 'java -version && mvn -version && printenv'
                }
            }
        }

        stage('Checkout & Verify Changes') {
            steps {
                script {
                    // 尝试拉取目标分支,失败则回退到master
                    try {
                        echo "Check out source code \"${BRANCH}\""
                        git url: DEFAULT_REPO,
                                branch: BRANCH,
                                credentialsId: gitCredentialsID
                        env.CURRENT_BRANCH = BRANCH
                    } catch (Exception e) {
                        echo 'Check out source code master'
                        git url: DEFAULT_REPO,
                                branch: 'master',
                                credentialsId: gitCredentialsID
                        env.CURRENT_BRANCH = 'master'
                    }
                    
                    // 获取当前分支最新提交哈希
                    env.LATEST_COMMIT = sh(
                        script: 'git rev-parse HEAD',
                        returnStdout: true
                    ).trim()
                    
                    // 获取上一次成功构建的提交哈希(首次构建则设为空)
                    if (currentBuild.previousSuccessfulBuild) {
                        env.LAST_SUCCESS_COMMIT = currentBuild.previousSuccessfulBuild.buildVariables.get('LATEST_COMMIT', '')
                    } else {
                        env.LAST_SUCCESS_COMMIT = ''
                    }
                    
                    echo "当前分支最新提交: ${env.LATEST_COMMIT}"
                    echo "上一次成功构建提交: ${env.LAST_SUCCESS_COMMIT}"
                }
            }
        }

        stage('Build') {
            when {
                // 当首次构建,或提交哈希不一致时执行构建
                anyOf {
                    expression { env.LAST_SUCCESS_COMMIT == '' }
                    expression { env.LATEST_COMMIT != env.LAST_SUCCESS_COMMIT }
                }
            }
            steps {
                sh 'mvn clean install -pl MyProject -am --fail-never -DskipTests=true'
            }
            post {
                success {
                    // 构建成功后归档产物,供后续复用
                    archiveArtifacts artifacts: 'MyProject/target/*.jar', fingerprint: true
                }
            }
        }

        stage('Reuse Previous Build Artifacts') {
            when {
                // 提交哈希一致时执行复用逻辑
                expression { env.LAST_SUCCESS_COMMIT != '' && env.LATEST_COMMIT == env.LAST_SUCCESS_COMMIT }
            }
            steps {
                echo "当前分支无新提交,复用${currentBuild.previousSuccessfulBuild.number}号构建的产物"
                // 复制上一次成功构建的归档产物到当前工作目录
                copyArtifacts(
                    projectName: currentBuild.projectName,
                    selector: specific("${currentBuild.previousSuccessfulBuild.number}"),
                    filter: 'MyProject/target/*.jar',
                    target: 'MyProject/target/'
                )
            }
        }
    }
}

关键逻辑说明

  • 提交哈希对比:在Checkout & Verify Changes阶段,通过git rev-parse HEAD获取当前分支最新提交,同时从历史成功构建中读取上次的提交哈希。
  • 构建条件判断:Build阶段通过when条件控制,仅在首次构建或有新提交时执行。
  • 产物复用:当无新提交时,进入Reuse Previous Build Artifacts阶段,使用copyArtifacts插件复制上一次成功构建的归档产物到当前工作目录。
  • 产物归档:构建成功后通过archiveArtifacts归档产物,确保后续复用时有可获取的资源。

注意事项

  1. 确保Jenkins已安装Copy Artifact插件(默认可能已安装,若未安装需在插件管理中添加)。
  2. 首次构建时会执行完整构建并归档产物,后续无新提交的触发会自动复用。
  3. 若分支切换或有新提交,流水线会自动执行新的构建并更新归档产物。

内容的提问来源于stack exchange,提问作者Nick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 17:58:20