from How We Build Code at Netflix
to be better, faster, and easier
Binary Dependencies
Netflix開發了名為Nebula的Gradle plugins集合
並且使用Gradle做為build system的工具
其中Nebula dependency-lock plugin可針對特定版本來lock dynamic dependency
而Nebula resolution rules plugin可訂定rule來規範解析dependency
Bake Time
當jenkins收到git commit異動trigger job後
會執行Spinnaker pipeline
Nebula ospackage plugin會將application打包Debian or RPM package
Spinnaker取得package後會call Bakery API to trigger a bake
執行install package然後產生image至Amazon Machine Image(AMI)
配合snapshot進行客製化AMI處理
3 layers of volumes
- the foundation image(OS image)
- the base AMI(the vast majority of customization happens)
- application's AMI
Immutable Server
至於為什麼要產生他們簡稱的operating system packageㄋ
因為Netflix deployment是採用Immutable Server pattern
Immutable Infrastructure or Immutable Delivery
與其費時設定可讓application作業且生命週期短暫的infrastructure環境
不如製做可重覆使用的AMI
利用AMI launch instance來跑測試驗證完成CD
可減少infrastructure跑完測試後要回覆原狀的不確定性
簡單的說就是要實現Stateless
Container
如果能提供local container-based的cloud環境
container deployed locally不需做多餘修改
相信有機會解決dependency和bake時間過長等以上兩大課題
另外有關Immutable Container可參考這篇心得筆記