![](/img/trans.png)
[英]Git/Gerrit Jenkins Continous Integration: How to handle rebase needs
[英]Recognize gerrit trivial rebase as event on jenkins
我需要找到一種方法來執行我的 jenkins 管道的一部分,僅當路徑瑣碎重新定位時。
if GERRIT_EVENT_TYPE=rebase{
stage ('A'){}
}
stage ('B'){}
gerrit 的每個 rebase 都會創建新補丁,我在作業參數 GERRIT_EVENT_TYPE=new_patch 上看到。
我知道作為作業配置的一部分,我可以在平凡的 rebase 上排除構建觸發器,因此插件機制獲得了將平凡的 rebase 識別為事件的機制,我該如何明確它? 有沒有辦法做到這一點?
克隆具有 -2 深度的 repo 並比較執行工作的父 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
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.