2012-05-01 175 views
12

我們正在從CruiseControl.NET遷移到Jenkins,以便與合作伙伴保持同步,因此我們沒有兩個不同的CI腳本。我們試圖設置Jenkins來做一些類似於CruiseControl的工作,它有一箇中央服務器在遠程構建機器上調用項目(jenkins中的作業)。主jenkins可以在遠程jenkins上運行作業嗎?

我們必須分配給一個單獨的項目,所以當我們從中央CI服務器生成項目,將調用遠程CI服務器上的多個項目的生成計算機。遠程CI服務器將從集中式CI服務器項目中提取版本。

在CruiseCruise控制,我們建立了一個項目,會做遠程項目forceBuild。構建機器上的項目使用remoteProjectLabeller來檢索版本號,以便它們始終保持同步。

要檢索的主版本號:

<labeller type="remoteProjectLabeller"> 
    <project>MainProject</project> 
    <serverUri>tcp://central-server:21234/CruiseManager.rem</serverUri> 
</labeller> 

調用遠程項目:

<forcebuild> 
    <project>RemoteBuildMachineA</project> 
    <serverUri>tcp://remote-server:21234/CruiseManager.rem</serverUri> 
    <integrationStatus>Success</integrationStatus> 
</forcebuild> 

到目前爲止,在詹金斯我設置爲從屬使用Java Web Start的輔助服務器但我不知道我會如何讓主jenkins調用從站上的項目設置。

我可以設置Jenkins以調用從站上的項目(作業)嗎?

我可以讓奴隸從主站拉出版本號嗎?

編輯 -

讓我補充一些更多的信息。

  • 主人和遠程生成機器奴隸都運行Windows。
  • 我們讓中央大師CruiseControl在同一時間啓動遠程項目,以便他們同時運行,並且如果可能的話,希望與詹金斯有相同的事情。

回答

9

詹金斯有build agents的概念,這也許可以適合您的方案更好 - 有一個觸發執行它的構建和奴隸的主人。然後構建可以僅限於某些類別的從站(例如,如果它依賴於特定的軟件,而不是所有代理都存在)。所有的數據都由主人集中管理,我相信這是你正在努力實現的目標。

+0

+1是的我一直在考慮巡航控制思維的配置。謝謝。 –

5

在詹金斯,不可能對從機,即其中一個構建運行不受誰觸發它的一個控制觸發構建。它由作業本身的設置控制。每個作業都有一個名爲「限制作業可以運行的地方」的設置。

你的情況,你可能有兩個工作:A和B. A將被限制在對「主」和B運行將被配置成在「slavename」運行。然後,所有剩下要做的就是對於A觸發B.

但是你有進一步的限制:你想A和B簽出的版本控制相同的版本,並且希望A和B並行運行。有很多方法可以實現,但最簡單的可能是定義一個多配置作業。

沒有辦法將現有的自由式作業變成多配置作業,因此您將不得不做出新的工作。

  • 選擇新的工作
  • 選擇建立新的多配置項目。添加一個名字。
  • 在配置矩陣下,打開「添加軸」下拉菜單。
  • 選擇奴隸
  • 檢查主機和從機
  • 添加的SCM信息,並建立步驟(S)

作業運行時,它運行在主機和從機兩種。詹金斯確保他們從相同的源版本構建。

+2

*在Jenkins中,不可能在一個從機上觸發構建,即構建運行的地方不受觸發它的人控制* - 這不是100%正確的。您可以使用[節點標籤參數插件](https://wiki.jenkins-ci.org/display/JENKINS/NodeLabel+Parameter+Plugin)將節點標籤指定爲參數,然後在* Restrict地址中使用該參數的值這項工作可以運行*領域。 –

+0

我使用三臺虛擬機a,b和c設置測試環境。 A是主人,B和C是奴隸。我創建了一個多配置作業,在配置矩陣下,我只選擇節點b,因爲我只希望它在該VM上執行。但是,當我運行構建它從主人運行它。爲什麼是這樣?我期待它在我選擇的節點上運行它。 –

+0

@AndyArismendi,你確定嗎?去工作,選擇最後的構建。它會顯示與你的孩子構建相對應的小球(可能只有一個,如果你只有一個孩子構建,那麼它會在旁邊說'默認')。球會是藍色,紅色或灰色 - 取決於狀態。點擊其中一個非灰色球。這是你的孩子建立狀態。孩子應該在奴隸'b'上跑。另一方面,頂級工作可能在任何地方運行(除非綁定到具有Matrix Tie Parent插件的節點)。 –

0

從/ jenkins/computer url中,您可以添加,刪除和重新配置「本地或遠程」構建代理「的」節點「。

然後可以限制作業在特定構建代理上運行,或遵循各種規則從可用代理中選擇適當的構建代理。

+0

我很抱歉,但是看起來你並沒有在這裏說出與以前答案中已經提供的內容有什麼新內容。 –

0

我在想Jenkins太像CruiseControl,在遠程機器上定義了作業。因此在Jenkins中,遠程項目在主服務器上定義,並通過代理委託給遠程計算機。

我使用安裝在遠程機器上的Windows服務的Java Web Start代理。要在特定的遠程計算機上運行特定的作業,我在每個遠程節點的從站配置中都定義了一個唯一的標籤。要將特定的作業綁定到特定的從站,我在每個作業配置中使用了從站的標籤(「限制可以運行此項目的位置」)。

要使用單個主作業觸發作業,我創建了一個只設置爲「構建其他項目」並提供逗號分隔列表或項目名稱的自由樣式作業。這項工作並行地構建下游作業。

我仍在尋找一種方法將主內部版本號發送到下游作業,以保持它們始終保持同步。 (這是用於版本的DLL等。)

相關問題