Netflix是如何構建程式碼的

青衫無名發表於2017-07-03

三名Netflix工程師Ed Bukoski、Brian Moyles和Mike McGarr在一篇博文中解釋了Netflix如何持續交付向7500萬觀眾提供電視節目和電影的程式碼。

Immutable Server模式是Netflix部署的基礎。每次部署都會建立一個全新的亞馬遜機器映象(AMI)。

Netflix的微服務架構讓Netflix團隊可以鬆耦合。變更推送速度讓每個團隊都很舒服。

Netflix不要求任何團隊使用任何工具集,但他們要負責維護他們實現的工具。在Netflix,有團隊會集中提供工具,作為“鋪好的路”的一部分,以減少大多數Netflix工程師的認知負擔。

這個“鋪好路”的程式碼交付過程由幾個步驟組成。程式碼使用Nebula在本地構建和測試。變更提交到中心Git版本庫。一個Jenkins作業構建、測試並打包應用程式用於部署。這些程式包使用Netflix的全球持續交付平臺Spinnaker部署到亞馬遜機器映象(AMI)。

構建

Nebula是Gradle構建系統的一組外掛,它可以構建、測試並打包Java應用程式。Netflix的大多數程式碼都是用Java編寫的。這些外掛擴充套件了Gradle的自動化功能,包括依賴管理、釋出管理以及打包。一個專案的構建檔案宣告瞭用到的依賴和外掛。

整合

下一步是將本地構建、測試並打包的原始碼推送到Git版本庫。具體的流程由團隊選擇。

提交完成後,會觸發一個Jenkins作業構建、測試並打包程式碼用於部署。程式包型別會根據構建物件是一個庫還是一個應用程式作出恰當的選擇。

部署

Netflix “Bakery”暴露了一個API用於建立AMI。具體的映象使用Aminator建立。使用者指明將什麼基礎映象和程式包放入該AMI。基礎映象是一個Linux環境,包含與Netflix生態系統整合所需的約定、工具和服務。

當Jenkins整合任務執行成功後,它會觸發Spinnaker管道。Spinnaker讀取Nebula程式包,並使用Bakery API建立AMI。

然後,Spinnaker會向數以十計、百計或千計的例項提供該AMMI。

第一次部署是到測試環境,部署會執行自動化整合測試。在通過這些測試後,Spinnaker為團隊提供了自定義生產環境部署過程的靈活性,例如多區域部署、金絲雀釋出或者紅/黑部署。

該自動化過程非常高效,舉例來說,Janitor Monkey雲彈性和維護服務從程式碼檢入到多區域部署只要16分鐘就可以完成。

未來方向

在Netflix,語言無關的需求與日俱增。非JVM語言需要包含進構建過程。

部署時間有一大部分是“烘焙(baking)”過程,Netflix正設法減少這部分時間。

此外,Netflix還在研究容器是否能夠幫助他們應對上述兩個挑戰。

容器還可以改進當前的構建、烘焙和部署過程,進而改善開發測試周期。可以在本地部署的容器,無需修改就可以部署到生產環境,這對於確定一個Bug是否是由環境差異導致的非常有幫助。這讓工程師可以專注於新特性。



本文轉自d1net(轉載)


相關文章