将gerrit小琐事重新识别为詹金斯事件

问题描述

我只需要找到一种方法,仅在琐碎的路径重新建立基础时才执行我的jenkins管道的一部分。

if GERRIT_EVENT_TYPE=rebase{
stage ('A'){}
}
stage ('B'){}

每个基于gerrit的基础都会创建一个新补丁,我在作业参数上看到GERRIT_EVENT_TYPE = new_patch。

我知道作为作业配置的一部分,我可以排除在琐碎的rebase上生成触发器,因此插件机制获得了将琐碎的rebase识别为事件的机制,我该如何显式呢? 有办法吗?

解决方法

克隆深度为-2的存储库并比较执行工作的父ID

if(env.GERRIT_PATCHSET_NUMBER.toInteger() > 1){  // the commit has previous revisions - let's compare their parents
        
        currParentSHA = checkoutRepoAndReturnParentSHA(env.GERRIT_PROJECT,env.GERRIT_REFSPEC)
        
        // calculate previous change refspec - reduce GERRIT_PATCHSET_NUMBER by 1
        tokenized_list = env.GERRIT_REFSPEC.tokenize('/') 
        tokenized_list[-1] = (env.GERRIT_PATCHSET_NUMBER.toInteger() - 1).toString()
        previous_patch_refspec = tokenized_list.join('/')
        
        prevParentSHA = checkoutRepoAndReturnParentSHA(env.GERRIT_PROJECT,previous_patch_refspec)
        
        isRebased = (currParentSHA != prevParentSHA) ? true : false
    }


def checkoutRepoAndReturnParentSHA(gerrit_project,gerrit_refspec){ // clone current change into dedicated directory and return parent commit SHA
    dir(gerrit_refspec){ 
        dir(gerrit_project){
            return sh(returnStdout: true,script: 'git rev-parse HEAD^1').trim() // get parent commit SHA 
        }   
    }
}