2015-10-07 93 views
2

有沒有什麼方法可以檢查一下Jenkins控制檯Groovy腳本中是否存在Git分支?我現在有這個:檢查詹金斯Groovy腳本中是否存在Git分支

import hudson.model.* 
// For each project 
for(item in Hudson.instance.items) { 
    // check that job is not building 
    if(!item.isBuilding()) { 
    if (item.scm instanceof hudson.plugins.git.GitSCM) { 
     println("Item name: " + item.name); 
     item.scm.repositories.each { 
     println("Repo " + it.name); 
     it.URIs.each {uri -> 
      println("URI: " + uri.toString()); 
     } 
     } 
     item.scm.branches.each { 
     println("Branch " + it.name); 
     } 
    } 
    } 
    else { 
    println("Skipping job "+item.name+", currently building") 
    } 
} 

這打印詹金斯的作業名稱,存儲庫和分支機構,但我可以運行測試拉爲了驗證分支存在?

此時我無法安裝Git commit hook來記錄已刪除的分支名稱,因此必須使用腳本求助於計劃的分支存在驗證。

謝謝!

回答

1

此腳本工作:

import hudson.model.* 


def jobsToDelete = [] 
// For each project 
for(item in Hudson.instance.items) { 
    // check that job is not building 
    if(!item.isBuilding()) { 
    if (item.scm instanceof hudson.plugins.git.GitSCM) { 
     println("Item name: " + item.name); 
     item.scm.repositories.each { 
     println("Repo " + it.name); 
     it.URIs.each {uri -> 
      println("URI: " + uri.toString()); 
      item.scm.branches.each { 
      println("Branch " + it.name); 
      // Skip empty/regex branch definitions 
      if (it.name.length() != 0 && it.name.indexOf("*") > -1) { 
       // Use git ls-remote to verify branch existence 
       def command = "git ls-remote --heads " + uri + " " + it.name 
       def sout = new StringBuffer(), serr = new StringBuffer() 
       Process proc = command.execute() 
       proc.consumeProcessOutput(sout, serr) 
       proc.waitFor() 
       println("SOUT: " + sout) 
       if (sout.size() == 0) { 
       println("Branch does not exist") 
       jobsToDelete << item 
       } 
      } 
      } 

     } 

     } 
    } 
    } 
    else { 
    println("Skipping job "+item.name+", currently building") 
    } 
} 

jobsToDelete.each { 
    println("Job to delete: " + it.name) 
    it.delete() 
}