分享我的這個體驗的簡化版本。要考慮是否在遠程泊塢窗發動機運轉依賴(B
,C
和D
)甚至是值得冒這個險,必須執行以下中的一個(通常)是真實的:
- 資源由不同的服務使用量不適合在單個開發人員計算機上運行。
- 初始化依賴服務的數據過於麻煩,因爲其大小或其他因素使其在本地運行時太繁瑣。
- 通過根據服務使用的數據引發隱私擔憂
什麼你可能使用遠程方式失去的是一個有點嚇人。
- 開發人員無法輕鬆控制正在運行的依賴服務的版本。如果這些服務是自定義的,這一點尤其重要,以便在問題被發現或修復時降級或升級版本。
- 在轉換到更新版本的第三方服務時,它也可能是一個問題,因爲並非所有的開發人員都可能在支持它的分支上工作。
- 此外,如果您不需要快速跳回舊版本的分支機構/版本來修復或發佈問題,然後將其集成/測試到當前分支,那麼當您最需要它時可能會非常沮喪(時間是問題!)
還有很多要添加到這些列表的其他要點,但這些對我們來說很重要。
我們結束了一個混合的方法。
開發人員將在本地爲大多數任務運行一切。我們削減了爲當地發展提供服務所需的數據,以便他們可以在幾分鐘內在當地啓動。使開發環境完全「脫機」是一個巨大的優勢。如果一箇中央系統發生故障,您的開發人員將迅速減少到在停機期間漫遊大樓的一羣殭屍。他們還有能力在火車上打開他們的筆記本電腦,並在需要時調試一些奇怪的問題,然後做出承諾,並讓CI系統咀嚼測試,以及在他們繼續個人生活的同時進行測試。
另外,我們啓動了一些運行依賴服務的docker引擎的虛擬機。這些(主要)live
和dev
名稱前綴(以及其他如果需要)幷包含來自現場環境的快照。如果需要,開發人員可以使用單獨的組合設置。當開發人員試圖確定由不良數據導致的問題或使用較大數據集嚴重縮小的代碼時,這可能很實用。
從未改變的是A
將始終運行在開發人員計算機上。如果某人出於某種原因有其他需求,我們會啓動一個新的VM,其中包括碼頭引擎,一些數據快照和相關服務。這是一個完全自動化的流程,所以這需要一個完善的高效管道。如果我選擇開始個人設置,則主機名可以使用我的用戶名作爲前綴。
我想說的是,如果開發人員可以在本地運行所有東西,那麼可以將自己從大量工作中拯救出來並做到這一點。在幾分鐘內找到聰明的方式讓所有依賴的服務順利運行。
數據相關性和隱私問題
,因爲太多的忽略了這一部分,我將在這裏注入了這一點爲好。
既然GDPR和Privacy Shield最可能在2018年給隱私問題帶來更大的壓力(至少在你存儲有關歐盟公民的數據時),你的公司將不得不認真對待或者可能面臨鉅額罰款和/或客戶拋棄你。這增加了一些工作。
- 本地服務的所有圖像包含生成的數據或不能用於識別個體的實時數據的變換子集。
- 遠程
dev
和live
主機還包含轉換後的數據以隱藏標識,但簡化了一些以大大加快此過程。
- 只有一小部分開發人員可以訪問實時系統,並且這些也是唯一允許使用實時數據運行自己的虛擬機的虛擬機(他們獲得該主機的唯一客戶機證書)。
開發人員每天都會隨便攜筆記本電腦出行,甚至將其帶回家。包含任何形式的個人信息的數據最終都不會在開發人員筆記本電腦上出現。
感謝您的詳細,但我仍然不清楚你如何能夠管理混合方法?我的意思是技術上 – chaosguru
您使用不同的組合設置注入配置告訴本地容器如何到達外部服務。那麼當然必須不斷更新外部服務。我們只是每晚或手動做,如果有什麼可怕的事情突破。我們用django和芹菜創建了一個服務來輕鬆管理這個服務,然後擴展到允許產生個人設置。一些開發人員在黑客日期間隨着時間的推移建立了這個開發者。 – Grimmy
好吧,讓我試試這個東西,並檢查。有一點可以肯定的是,在我們的案例中,外部服務得到很好的控制,我認爲失敗是可預測的。謝謝 – chaosguru