2015-10-16 64 views
0

當前情況: 我們有一個用C++編寫的應用程序,用cmake構建,使用googletest進行單元測試。C++應用程序在不同環境下自動構建

我們有兩種環境:

  • 測試:本地不那麼強大的服務器
  • 製作:用預構建AMI圖像幾個亞馬遜EC2實例

我們測試本地計算機上,當我們發佈時,我們在生產機器上籤出代碼,構建它並運行。

現在公司正在用自動化構建工具(如Jenkins)來推廣CI。 儘管我們可以自動化構建過程,但有些人建議不建議直接在生產機器上構建。

但在我看來,不像Java程序可以運行,只要有JRE,C++應用程序就非常依賴於機器。

大多數情況下,Docker可能是銀色的子彈,但不幸的是,我們的應用程序無法放入docker中,因爲它需要在一組真正的機器上運行。

行業中是否存在處理這類問題的一般/常用方式?

+0

恕我直言只要圖像相同,應用程序就會表現相同。所以我會設置一個具有相同映像的本地虛擬機,並首先對其進行測試和/或創建另一個亞馬遜實例(不是很強大),並在那裏測試並構建它,然後將二進制文件移動到生產系統。直接在生產環境中構建可能會破壞服務,並可能使用大量資源。 – knightrider

回答

0

你可以使用相同的類服務器作爲Production的CI系統,但不與Production服務器干擾添加Staging(你的願望或Pre-production或任何名稱)的環境。

一旦您對Staging結果感到滿意,您就可以安全地在Production上進行部署。

運行CI系統本身可能會干擾同一服務器上測試的觀點仍然適用於Staging環境(我不確定是否正確理解這是關注的一部分)。唯一的解決辦法就是專門用於CI系統操作的CI環境(運行CI基礎設施,建築物等)。此CI環境中的服務器級別僅對CI系統性能很重要。 CI系統應能夠處理不受CI操作影響的遠程環境(如StagingProduction)的測試驗證。

0

我不想猜測爲什麼你的應用程序有硬件/服務器的真正需求,但我的第一個賭注是泊塢窗,而且很棒。我們做了類似的工作,並與github,竹子,藏匿處和碼頭工作者很好地結合在一起。最好的部分是可擴展性和依賴關係很好地包含並迅速識別構建破壞。

我在過去看到過的另一種方法是,您擁有各種搭建公用文件服務器的構建機器/服務器,並且每當在git中發生推送時,就會調用一個本地服務來選擇CPU負載最低的服務器,在該機器上構建代碼(儘管代碼位於通用文件服務器中)

相關問題