检查Jenkins Groovy脚本中是否存在Git分支

检查Jenkins Groovy脚本中是否存在Git分支,git,groovy,jenkins,Git,Groovy,Jenkins,有没有办法检查Jenkins控制台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) {

有没有办法检查Jenkins控制台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")
  }
}
这会打印Jenkins作业名称、存储库和分支,但是否可以运行测试拉取以验证分支的存在

目前我无法安装Git提交钩子来记录已删除的分支名称,因此必须使用脚本进行预定分支存在性验证

谢谢

此脚本可以工作:

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()
}
导入hudson.model*
def jobsToDelete=[]
//对于每个项目
for(Hudson.instance.items中的项){
//检查作业是否未生成
如果(!item.isBuilding()){
if(hudson.plugins.git.GitSCM的item.scm实例){
println(“项目名称:”+项目名称);
item.scm.repositories.each{
println(“回购协议”+信息技术名称);
it.URIs.each{uri->
println(“URI:+URI.toString());
item.scm.branchs.each{
println(“分支机构”+it.name);
//跳过空/正则表达式分支定义
if(it.name.length()!=0&&it.name.indexOf(“*”>-1){
//使用git ls remote验证分支是否存在
def command=“git ls remote--heads”+uri+“”+it.name
def sout=new StringBuffer(),serr=new StringBuffer()
Process proc=command.execute()
进程ConsumerProcessOutput(sout,serr)
waitFor()程序
println(“SOUT:+SOUT)
如果(sout.size()==0){
println(“分支不存在”)
作业删除