2015-04-16 74 views
0

我正在嘗試爲下面的謎題找到解決方案。我有java項目,由maven管理,需要一些本地依賴來運行(運行單元和集成測試)。這些以deb包的形式提供,需要在運行構建之前安裝。Sandboxed Maven構建在Jenkins上

我使用Jenkins的CI。本機依賴不能安裝在Jenkins節點上,因爲它與其他版本發生衝突,並且它們可以經常更改。我現在所做的不是創建一個Jenkins作業類型'maven',而是'freestyle',並使用pbuilder創建一個乾淨的沙箱,安裝所需的所有東西並調用maven構建。

這很好,但我失去了Jenkins maven的好東西,比如自動上游項目,當依賴項更改時觸發構建等等.Jenkins根本不知道maven在那裏。

最後,我的問題。有沒有辦法如何實現這兩個目標,隔離構建如此安裝的庫不會影響其他構建,並利用詹金斯應用於Maven構建及其依賴的「魔術」?

回答

1

該問題可以通過使用分佈式Jenkins構建來解決。可以將從屬代理配置爲爲每個構建提供乾淨的環境(例如,通過VM,docker等),並在構建完成後將其拆除。 Jenkins的工作方式可以是Maven類型,並且預構建步驟所做的任何更改都不會影響其他人。

更多信息可查詢here

1

您可以將您的構建拆分爲三個作業,這會觸發下一個作業。

  1. 創造必要的環境
  2. 運行Maven工作
  3. 清理
+0

你是否有領導如何準備環境,所以下一個jenkins工作(maven類型)可以跳過它並運行「內部」? – jojovilco

0

考慮泊塢窗。在那裏你可以在你想要的孤立環境中運行進程。 Docker的工作方式很容易與Jenkins通信。

作爲一個好處,您也可以使用該docker容器在Jenkins中運行的相同環境中運行本地構建。

+0

是的,碼頭工人橫渡了我的想法,但是我無法找到領先的方法。大多數例子只是在Docker容器內執行一些東西。但是,如何設置Jenkins知道Docker內部正在發生Maven構建,他應該在事後做好自己的技巧? – jojovilco

0

即使是Freestyle任務也會「調用頂級Maven目標」。你可以使用它來獲得「maven的好東西」,同時也有能力運行其他構建步驟。

有一個選項「使用私有Maven倉庫」,它將確保它將使用相對於工作區的.m2/repository文件夾位置。如果您需要分成多個作業,則可以在這些作業之間使用「自定義/共享工作區」。

即使在Maven風格的作業中,也可以選擇使用私有存儲庫,以便一個作業不會影響另一個作業。

+0

是的。但我看不出有什麼幫助。 m2存儲庫不是問題。我需要安裝非Maven/Java的東西,這將提供給執行的構建。例如執行一堆apt-get install xyz,這會導入通過jni訪問的系統C++庫。 – jojovilco