2012-06-19 71 views
6

工具
Jenkins ver。 1.470
的Maven 2
顛覆Jenkins部分構建/提交吊鉤上的模塊化構建

環境

假設我打造了一批項目A-d。依賴關係圖如圖所示。也就是說:B依賴於A中的類,C依賴於B中的類,D依賴於A中的類。我們創建jenkins構建,使得他們將構建依賴於它們作爲後構建操作。


| - >乙 - 「ç
| - > d

每天晚上,我們在詹金斯(A構建,觸發器觸發完全構建B(觸發器C),觸發器d )。通過告訴A建立每晚,其餘的級聯可以輕鬆完成。

問題

然而,在承諾我們所要建設都致力於一旦項目。

  • 情況1:我們查詢資料庫(或使用commit hooks,這都沒有區別),發現有一個承諾,B,那麼B將建立和C能增強。 成功!

  • 情況2:我們查詢資料庫,發現B和C都致力於在一次提交,然後詹金斯將嘗試建立B(觸發℃的建設),並建立C(第二次構建)。 失敗。看看會發生什麼? C建造了兩次,佔用了寶貴的建造時間。 保持構建速度!

有誰知道一個辦法只能觸發每個致力於構建流水線最高的項目嗎?

我想一個解決方案將是一個複雜的SVN鉤,其確定最高項目中的每個管道...

  • 情況3:承諾B C和d在一個提交。 SVN掛鉤發現C取決於B.鉤子調用項目特定的鏈接來開始構建B和D.

陷阱:非常複雜的SVN提交掛鉤。必須維護SVN鉤子中的管道。

我覺得這是別人遇到的問題。有沒有一個Jenkins插件可以解決這個問題?

+0

在情況2中,jenkins項目C&B正在看同一個svn項目? – thekbb

回答

1

這將是一個想法,說詹金斯等待與建設,直到一個建立,C依賴於完成。這是作業配置中的一個標誌,爲了實現這一點。但是你必須爲每項工作做到這一點。 Btw ...還有另一個標誌,要求jenkins等待構建,直到完成一個依賴工作。

0

我也在尋找一個有效的解決方案來解決這個問題。我已經看到了一些建議,但到目前爲止,我們只能通過使用Locks & Latches插件序列化構建來避免其中的一個缺陷。它不會阻止項目從單個簽入多次構建,但會確保項目在上游項目完成後按順序重建。

這實際上是一個複雜的問題需要解決的一般情況下,但我一直在想寫一個插件來處理這個問題。一個簡單的解決方案就是檢查上游項目是否正在構建,如果是,則將自己從構建隊列中移除。由於上游作業會在完成時啓動構建,因此這是一種選擇。

更好的選擇將是一個插件,它可以根據您的依賴關係圖自動管理構建隊列。這可能很複雜,因爲您需要確保在完成所有依賴關係之前不會開始構建。基本上這意味着每次檢入都會使插件自動將所有下游版本添加到隊列中,以便管理它們。在現有的上游/下游觸發器中,可能有一個聰明的,更簡單的方法來實現這一點,但對於我如何實現這一點還不清楚。已經有構建管道插件聲稱可以處理這種情況,但他們顯然沒有做任何事情來阻止下游構建可以通過與上游構建相同的檢查觸發的競爭條件。