使用groovy在Jenkins中设置upstreamproject

时间:2012-12-19 11:59:31

标签: groovy jenkins

我想将FreeStyleProject复制到一个新作业,然后使用groovy为这个新作业设置一个新的upstreamproject。 我在Class FreeStyleProject上找不到任何让我这样做的方法: 设置一个新的upstreamproject。是否有其他方法或技巧可以实现这一目标?

def x = "testproj"
def hi=hi.getItem(x)
hi.copy(x, "Copy"+x); 
def newjob=hi.getItem("Copy"+x)
//newjob.setUpstreamProject("bar") //<<--?
  def di = newjob.getUpstreamProjects()

     for ( y in di ) {

      println(y.name)
}

更新 澄清:

工作A ====&gt;工作B(A在上游)

我想复制两份工作,所以我得到了

工作A'和工作B',然后设置A'或B',我得到 A'=====&gt;工作B'(A'在上游)

我认为我需要删除构建触发器并创建一个新的构建触发器(这就是创建上游/下游概念的原因)

1 个答案:

答案 0 :(得分:2)

通过两个FreeStyle项目和一个下游项目的示例,此剪辑将找到TestTop并将它们设置为现有的TopTest2。 这个概念是在项目的 getPublishersList 的帮助下获得构建触发器然后 获取这些的hudson.tasks.BuildTrigger.class。

对于这些中的每一个都做一个 publishlist。的删除(AA) publishlist。 add (new hudson.tasks.BuildTrigger(“TestTop2”,false))

def hudsonInstance = hudson.model.Hudson.instance 
hudsonInstance.getItems(hudson.model.Project).each {project ->

  if (project.displayName== "TestTop"){
    println(project.displayName)
    def di = project.getUpstreamProjects()
    def triggers=project.getBuildTriggerUpstreamProjects()
    for (z in triggers){
      println("triggers " + z.getDisplayName())

      def pubList = z.getPublishersList()
      for(w in pubList){

        println(w)

        def buildTrigger = w.grep(hudson.tasks.BuildTrigger.class) 

        println("BT " + buildTrigger)
        for(aa in buildTrigger){
          println("aa " + aa.getChildProjectsValue())
          def newtop =  hudsonInstance.getItem("TestTop2")
          pubList.remove(aa)
          pubList.add( new hudson.tasks.BuildTrigger("TestTop2", false)) 
        }               
      }
    }   
  }
}
hudsonInstance.rebuildDependencyGraph()