2014-01-28 102 views
4

我們需要能夠運行消耗兩個奴隸的Jenkins作業。 (或者,如果我們可以保證他們同時運行,並且至少有一個人可以知道對方是什麼,那麼可以有兩個工作)。情況是,我們有一個沉重的應用程序,我們需要運行測試。測試在一臺機器上運行,應用程序在另一臺機器上運行。讓他們在同一臺主機上是不現實的。jenkins工作在兩個奴隸?

現在,我們有一個Jenkins作業,它使用腳本來啓動專用應用程序服務器,安裝正確的版本和正確的數據,然後針對它運行測試。這意味着我不能使用專用應用程序服務器來運行其他任務,而不會進行重量級測試。它也將我們限制在一個循環中。能夠動態分配應用服務器將允許其中更多。

在覈心jenkins中顯然沒有辦法做到這一點,但我希望有一些插件或hackery使這成爲可能。當前的測試版本是maven 2的工作,但如果我們必須將其包裝在其他內容中,這是可配置的。這是由另一項工作的成功完成所啓動的,可以將其改爲開始兩項工作,或者其他任何需要的工作。

回答

0

讓我看看我是否理解這個問題。

  1. 您想要動態選擇一個從站並啓動其上的App Server。

  2. 當應用服務器在從服務器上運行時,您不希望它運行任何其他工作。

  3. 但是,當App服務器沒有運行時,您希望將該Slave用作其他Slave作爲其他任務。

一種方法是標記奴隸。然後使用「限制可以運行此項目的位置」,使App Server和Test Suite在具有從屬標籤的機器上運行。

然後在從屬節點中,將「#執行者」設置爲1.這將確保在任何時候只有一個作業將運行。

下一步將是創建一個作業來啓動應用程序服務器,然後一旦應用服務器開始的工作是成功的開球測試作業..

如果您的測試工作需要知道的服務器的詳細信息你的應用程序服務器正在運行的機器會變得很有趣。

+0

這幾乎是我們最終做的。我們需要傳遞下游作業一些配置信息。如何做到這一點並不十分清楚;我最終使用的是由應用服務器作業編寫的屬性文件。這工作正常,並且寫作很簡單,但確定這一點並不明顯。 – dms

2

我剛剛從多個奴隸的同時分配可以在pipeline工作很好做,通過嵌套node條款獲悉:

node('label1') { 
    node('label2') { 
     // your code here 
     [...] 
    } 
} 

this question其中Mateusz建議,類似的問題的解決方案。