2015-06-21 82 views
0

這也許是一個不尋常的Jenkins查詢,但我們有一個跨越很多項目的項目。它們都是基於Linux的,但它們跨越多種體系結構(MIPS,SPARC,ARMv6,ARMv7)。配置Jenkins以編程方式從構建參數確定構建時的slave?

對於特定的組件,讓我們把它叫做「視頻編碼器」,因此,我們將有4個項目:MIPS-視頻編碼器,SPARC-視頻編碼器等

每個項目是建立在4將標籤與其架構分開,即MIPS從服務器的標籤爲'mips''linux'。

我的目標是:

  1. 整合我們所有的單獨工作。這應該使我們更容易修改作業屬性,也更容易添加更多作業,而無需添加如此多架構特定作業的雙重工作。
  2. 允許我們一次只構建一個架構,如果我們願意的話。如果MIPS作業失敗,我們希望只爲MIPS而不是其他作品。

我看過'多配置'類型的工作 - 目前我們只是使用簡單的單一配置工作。我不確定多配置類型是否允許我們一次構建單獨的體系結構。我有一個配置矩陣玩,但不知道這是否可以改變/適應只爲單一平臺。看起來我可能能夠使用Groovy語句來執行此操作?喜歡的東西:

(label=="mips".implies("slave"=="mips") 

也許這可以簡化到像奴隸==標籤,其中標籤是作業前的名字,當在它的配置單狀態,現在是一個構建參數?

我在想,如果我們可以通過編程方式爲此選擇slave,我們不需要多配置作業。

我非常感謝一些建議,關於如何整合我們擁有的工作數量,並基於作爲構建參數的項目體系結構以編程方式更改目標從屬服務器。

提前許多感謝,

+0

是什麼所有這些工作的共同點?只有參數,或者有共同的構建步驟? –

+0

有一些常見的構建步驟:有效地,我們'cd'進入目錄並運行'make ARCH =',其中ARCH = mips/armv7 /等。我們總是使用相同的文件名SCP,因此這裏沒有問題。 – user3526827

回答

0

你可以用一個系統Groovy腳本的包裝工作。你需要這個groovy插件。讓調用包裝的工作 - video-encoder-wrapper,這裏有子彈如何配置它:

  • 定義參數ARCH
  • 標籤分配給由步驟Execute system Groovy script

    基礎上,ARCH參數video-encoder工作
    import hudson.model.* 
    encoder=Hudson.instance.getItem('video-encoder') 
    def arch =build.buildVariableResolver.resolve("ARCH") 
    label= Hudson.instance.getLabel(arch) 
    encoder.setAssignedLabel(label) 
    
  • 調用非阻塞下游項目video-encoder,別忘了傳遞ARCH參數

  • 檢查video-encoder作業配置中的選項Set Build Name,並將其設置爲${ENV,var="ARCH"} - #${BUILD_NUMBER}。它將允許您輕鬆跟蹤構建歷史。
  • 禁用video-encoder-wrapper作業的併發構建。這將防止2個不同的標籤分配在同一時間到video-encoder工作

希望它有助於

+0

你的意思是仍然保持單獨的ARMv7/ARMv6/MIPS包並使用這個包裝?這並不能幫助我們減少詹金斯的工作。如果我'將視頻編碼器構建名稱中包含您的參數ARCH',這是否允許我傳遞ARCH(使其通過shell調用)以及製作出正確的從屬設備來發送作業? 謝謝 – user3526827

+0

你不需要爲不同的體系結構保留獨立的作業。是的,如果您將'ARCH'參數傳遞給'video-encoder'作業,您可以傳遞它。順便說一句,我已經編輯了一些答案,以更清楚地說明構建名稱中包含'ARCH'。 –