2017-05-15 48 views
4

我已經搜索了整個互聯網2周現在,問freenode IRC和詹金斯用戶組郵件列表中,但沒有得到答案,所以我在這裏,你是我最後的希望(沒有壓力)詹金斯管道和大量的並行步驟

我有一個詹金斯腳本管道,生成數百個並行分支,必須在數百個從節點上同時運行。目前,Jenkins BlueOcean用戶界面看起來並不適合。我們達到了一個點,所有的步驟都無法顯示。

我需要提供某種背景讓您瞭解我們的需求:我們公司有一個巨大的項目,擁有數千個Behat/Selenium,如果順序完成,現在需要30小時才能運行。我們前幾次實現了一個基本的解決方案,我們使用排隊系統(RabbitMq)來存儲運行測試的所有測試和消費者,它們通過從Jenkins下載源代碼並將工件上傳回Jenkins,但這不像可以詹金斯的本地奴隸,它不夠可維護(例如,我們不受益於實時輸出日誌和使用統計)。

我知道這裏有一個公開的問題,描述這裏的問題:https://issues.jenkins-ci.org/browse/JENKINS-41205但基本上,我需要一個解決方案,爲下一週工作(我們的發展團隊正在等待這個新的管道很長一段時間)。

我們pippeline看起來像這樣的時刻:

Build --- Unit Tests --- Integration Tests --- Functional Tests --- 
       |    |     | 
       tool A   suite A  matrix-A-A-batch 0 
       tool B   suite B  matrix-A-A-batch 1 
       tool C       matrix-A-A-batch 2 
               matrix-A-A-batch 3 
                .... 
               "Unable to display more" 

你可以在這裏找到一個完整版我們Jenkinsfile的:https://github.com/willy-ahva/pim-community-dev/blob/086e4ed48ef1a3d880ca16b6f5572f350d26eb03/Jenkinsfile(它可能看起來很複雜,但是,基本上,真正的問題是「功能測試」階段)

我的問題是:

  1. 我在用水貨的好方法嗎?
  2. 這僅僅是一個詹金斯/藍海問題,我應該爲我鏈接的問題做出貢獻? (如果是的話,怎麼樣?我根本不是Java開發者)
  3. 我應該嘗試使用MultiJob並行化作業而不是步驟嗎?
  4. 除了可以使用的並行之外,還有其他的工具嗎? (某種叉子或其他)?

非常感謝您的幫助。我喜歡Jenkins在Pipeline和BlueOcean用戶界面上的成就,我真的很想在團隊中發揮作用。

+0

隨着Spencer Malone的消化,我們保持了這種並行性的隊列系統。我們稍微改變了我們的構建,以便更容易擴展(通過消除主用戶與消費者之間的多對一關係,因此不會產生瓶頸)。 –

回答

1
  1. 這可能是一種糟糕的方式來執行並行任務。我會將每個並行映射條目視爲一個工作者,並將您的測試放入隊列/堆棧/數據結構中。每個工作線程可以根據需要從隊列中彈出,然後您不會在那裏排隊等待一百萬個任務。你必須更加小心你的日誌記錄,以便明確哪個測試失敗了,但這不應該太難。
  2. 這可能不是一件容易修復的事情,因爲它與其他任何事情一樣是一個UI設計問題。我會建議你給它一個戳!誰知道,也許一個解決方案會點擊你?
  3. 可能不是。在我看來,這使得這個模糊
  4. 並行是你的選擇分叉。

如果你真的想繼續這樣做,但不希望界面如此怪異,你可以停止將每個測試定義爲一個階段。不太清楚一個失敗時失敗的原因,但UI應該更加快樂。

+0

「我會將每個並行映射條目視爲一個工作者,並將您的測試放入隊列/堆棧/數據結構中。」你可以再詳細一點嗎 ?我已經這樣做了,但我真的希望開發團隊能夠改變他們的管道,就像他們爲Jenkins文件的其餘部分所做的那樣。 –