2012-12-19 33 views
1

我想將FreeStyleProject複製到新作業,然後使用groovy爲此新作業設置新的上游項目。 我在Class FreeStyleProject上找不到任何方法讓我這樣做: 設置了一個新的上游項目。有沒有其他方法或技巧可以實現這一點?使用groovy在Jenkins中設置上游項目

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 ====>作業B(A是上游)

我想複製這兩個職位都讓我得到我

工作A'和工作B'然後設置A'或B',所以我得到 A'=====>工作B'(A'是上游)

我想我需要刪除一個構建觸發器並創建一個新的構建觸發器(這就是創建上游/下游概念似乎是什麼)

+0

一個「上游項目」是調用你現在的工作任務 - 你確定你想要把自己在那種一個循環?你真的想在這裏實現什麼? – Gonen

回答

2

對於兩個FreeStyle項目和一個下游示例,此代碼段將找到TestTop並將它們設置爲現有的TopTest2。 這個概念是通過getPublishersList對項目的幫助獲得buildtriggers,然後 獲得這些的hudson.tasks.BuildTrigger.class。

對於每個這些做 publishlist。 刪除(aa) publishlist。 添加(新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() 
相關問題