打造雲上代碼交付鏈,CodePipeline實踐分享
在2017在線技術峰會——首屆阿里巴巴研發效能嘉年華上,來自阿里雲飛天研發部的工程師莫源分享了《打造雲上代碼交付鏈,CodePipeline實踐分享》。他在雲計算和雲平台、持續集成流程、DevOps的基礎上,詳細分享了Alibaba Cloud CodePipeline優於Jenkins的性能和實踐。
以下內容根據直播視頻整理而成。
直播視頻:https://yq.aliyun.com/edu/lesson/549
PDF下載:https://yq.aliyun.com/attachment/download/?id=1844
雲計算和雲平台
雲計算領域和其他領域是非常相似的,當一個領域越來越成熟的時候,發展方向會朝著精細化發展。比如,ofo解決了如何脫離城市公共交通之外解決最後一公里的問題。雲計算也越來越成熟,上雲解決了基礎設施交付的問題,但是對於開發者而言還遠遠不夠,雲原生架構設計與應用成為了雲計算的「最後一公里」問題。
上圖是NETFLAG公司定義的Cloud Native架構設計圖。主要分為三個部分:Framework(左邊),推薦使用微服務架構;Container Runtime(右邊),建議容器化、資源生命周期自動化;Infrastructure Automation(中間),表達了基礎設即代碼的思想,以及配管運維自動化。
把剛才的圖轉換一下,可以總結為四個要點:DevOps、Continuous Delivery、Microservices、Containers。但對於開發者來講,微服務和容器並不是必須的,而是與自己的模型、編程框架相關的,而DevOps和持續集成則是通用的模型。作為一個雲計算廠商,我們要解決的是開發者如何在通用模型之下解決自己的問題。
上圖大家都比較熟悉,講述了雲平台的SaaS、PaaS、IaaS層。最底層是IaaS層,提供了資源,PaaS層提供了能力,而SaaS層提供了服務。金字塔最底層是最紮實的,越往上越小,而DevOps是塔尖。所以,只有最底層基礎設施的環境變得十分穩固、厚重的時候,才能保證最上層的DevOps有一個更高效的能力。
持續集成流程
常見的DevOps流程分為代碼開發,提交代碼到代碼倉庫,通過web hook觸發,由持續集成系統分別部署到測試環境、預發環境、正式環境。
上圖是基於容器的持續集成流程圖。和前圖的區別在於,在持續集成系統上層有一個鏡像倉庫,持續集成系統會把鏡像推到鏡像倉庫,部署的時候由部署環境拉取鏡像進行部署。
DevOps
DevOps不是讓你成為全能忍者,而是消除「等待」與「浪費」。傳統的瀑布流開發模型分為很多階段:需求分析、設計、實現、驗證、運維,這個過程中我們會等待基礎架構的設計、應用程序部署、其他團隊或者審核流程。而DevOps可以幫助消除不必要的流程、特性、人工、返工。
DevOps核心思想是分而治之,連續集成,快速交付。以前軟體開發、交付的生命周期很長,以月或者半年為單位,現在將生命周期進行切分,變成以周或者天為單位。為什麼以前沒有做到?因為以前很難做到整個流程的自動化,比如基礎設施自動化、交付自動化等,而現在雲計算給了我們這個能力。Cloud Native、Microservices、Docker、Serverless是和DevOps結合最緊密的四個領域。這些領域展現了軟體架構的變革,軟體的架構變革帶來了靈活性、穩定性、功能性也帶來了技術成本。比如,Docker解決了如何快速交付的流程但是解決不了學習Docker的成本、運維的成本。DevOps解決的是如何將上述四個領域的技術成本屏蔽,通過自動化的方式把很多技術的問題變成按鈕點擊的問題。所以,DevOps的本身不是一個技術問題,但是技術的變革需要DevOps來填平帶來的技術成本。DevOps實現是一個適配器,封裝了本地開發與遠程交付之間的實現。
DevOps里最核心的是持續集成伺服器,它是交付流程的發動機。用的最多的持續集成伺服器是Jenkins,每個階段Jenkins都可以和很多系統集成,但是它也存在一些問題:架構陳舊,性能低下,單個Jenkins在並發1000個job或者250個slave的時候就會出現很嚴重的性能問題;安全漏洞很多,Master、插件都有很多漏洞;獨立運維成本很高,Jenkins本身是Java的應用,但是還涉及到slave pool、鏡像、配置插件等;缺乏完善的許可權模型,使用許可權模型的時候沒法和namespace脫開;通用的DevOps模型需要更多的集成;插件太多導致缺乏最佳實踐經驗。
Alibaba Cloud CodePipeline
Alibaba Cloud CodePipeline是一個SaaS化的持續集成引擎。通過可視化的配置,簡單快捷地實現持續集成與持續交付的流程,完全兼容Jenkins,並且在Jenkins上做了很多增強。
上圖是Alibaba Cloud CodePipeline的基礎結構圖。CodePipeline Service是任務調度系統,它會把任務分配到任務沙箱式運行時環境資源池,資源池是彈性伸縮的,開發者使用CodePipeline的時候無須擔心自己的任務有多少、並發有多少。構建任務完成、代碼下發好之後會發布一條部署命令,部署命令是由Deploy Service來完成的,它是通過反打方式實現的,好處是無須擔心用戶的網路環境。右側是部署環境,支持ECS、HPC、VM、阿里雲的Container Service。
SaaS化持續交付引擎
SaaS化的好處是:無需運維,開箱即用,使用雲賬號登陸即可擁有免費使用額度,獨立部署支持與企業現有的LDAP集成,內置多種常用必備插件,無需二次安裝;資源按需使用,動態生成,按使時長和資源付費,無需擔心資源容量(公測不收費),資源動態使用動態銷毀,無需擔心代碼、構建物外泄,資源無需運維,平台資源池統一維護,資源秒級生成、秒級銷毀。
全量兼容Jenkins插件
CodePipeline對Jenkins插件進行了安全加固,所有開放出來的插件都經過安全加固,加固後的插件不定期的反饋給社區。並且根據開發者需求不斷開放Jenkins插件滿足開發者的需求。開發者可以根據需求提交開放申請,內置的Best Practise會提供更多場景的插件組合的使用方案,開放的插件的能力會在阿里雲的場景下有更多的集成。
阿里雲產品生態無縫集成
集成OSS、容器Hub存儲構建物,OSS提供構建物存儲,Hub提供鏡像存儲,未來考慮支持(Nas等等)。支持多種部署環境,包括ECS支持標準應用部署、容器支持容器化部署、EGS、ESS、EWS等等。
多種部署方式支持
支持跨Region部署(經典、VPC),具備IDC、公有雲、跨雲混合部署的能力,VPC網路採用反向通道的方式,無需在安全組上打洞。支持多種部署方式,具備ECS、容器服務混合部署,支持不同部署環境跨Region部署,支持部分部署模型的無宕機發布。支持全量的部署環境,公測版本支持Java、Node.js的環境,預計短期開放PHP、Python、Go、C++等語言。
內置最佳實踐
嚮導方式內置語言的部署最佳實踐,公測支持Java與Node.js,支持用戶自定義最佳實踐(待開放)。社區、論壇提供最佳實踐的文章與指南,提供基礎功能的使用指南,提供標準流程的最佳實踐指南,提供高級功能擴展使用實踐。
※專訪|楊強教授談CCAI、深度學習泡沫與人工智慧入門
※擁抱開發過程中的「黑天鵝」
TAG:雲棲社區 |
※Apache Storm流計算模型 及WordCount源碼實踐
※BGP Confederation原理實踐
※RPC框架實踐之:Apache Thrift
※5分鐘了解TencentHub技術架構與DevOps實踐揭秘
※TalkingData的Spark On Kubernetes實踐
※iHealth基於Docker的DevOps CI/CD實踐
※Spring Cloud Contract 在永輝雲創的研發實踐
※技術解析系列PouchContainer Goroutine Leak 檢測實踐
※從Paxos到zookeeper分散式一致性原理與實踐-Zookeeper與Paxos
※Android Studio中的13條Git實踐
※快速搭建你的 github pages 個人博客——基於 Create-React-App 的單頁面應用實踐
※實踐出真知!KTM 790 Duke硬懟Triumph Street Triple R
※Service Mesh 實踐指南:從單體應用到 Service Mesh 的曲折歷程
※Istio技術與實踐02:源碼解析之Istio on Kubernetes 統一服務發現
※BingoCloudOS V8.0應用交付流水線功能實踐
※打包優化實踐(如何Code Spliting)
※華為在OpenStack Days China上分享混合雲行業場景及優秀實踐
※Github 代碼實踐:Pytorch 實現的語義分割器
※Github代碼實踐:Pytorch實現的語義分割器
※Facebook開源機器人框架PyRobot,擁有獨立API,輕鬆上手快速實踐