Jenkins之父Kohsuke Kawaguchi談持續交付流水線
一切優秀理念和方法論的大規模普及,都有賴于先進技術的發展以及對應工具的發明創造來承載,DevOps持續交付理念亦不例外。軟件開發是截至目前,人類最復雜、最不可控的工程技術工作,一次代碼提交到上線,會涉及數十、數百、乃至數千個步驟、命令、服務、應用和環境,如果我們沒有自動化交付流水線來不斷提升自動化率,實施可重復且可靠的交付運作,而按照傳統的以流程文檔和操作規范指引、通過手工操作來進行交付活動的話,其工作效率之低、錯誤率之高已經和正在被諸多沒有采用DevOps開發模式和持續交付工具鏈的企業所驗證。
KK談DevOps持續交付理念和方法論
Kohsuke Kawaguchi(KK)作為Jenkins的創始人,同時也是CloudBees公司CTO,是將DevOps持續交付理念進行工具工程化實踐的第一人,更是推動DevOps理念大規模普及的靈魂人物之一。作為軟件開發端到端持續交付系統,Jenkins用戶量達200+萬,在持續交付流水線專業工具領域市場占有率超90%,是事實上的流水線工具標準。
日前,在2018華為全聯接大會上,KK帶來主題為《Super Powers Coming to Your Jenkins》的精彩演講,內容涉及DevOps CI/CD持續交付理念和方法論,以及Jenkins流水線Blue Ocean、Cloud Native Jenkins、Jenkins Evergreen、Jenkins X等面向不同場景的產品解決方案及關鍵技術。
例如,有了Cloud Native Jenkins,通過云化和彈性擴容降低單點故障,用戶就不會在周五晚上接到Jenkins服務宕機需要修復的連環奪命call,也無需做資源的預留以降低運維成本和前期投資,未來也將會有更高的性能表現。
Jenkins Evergreen提供了預置模板,用戶僅需幾次點擊,在幾分鐘內即可生成一條可持續工作的流水線,大大簡化流水線的配置步驟,有效降低配置門檻。Evergreen所有的配置均由Jenkins管理,可在線升級,用戶只需專注于自己的業務開發和交付即可,無需關注各種復雜的流水線配置和組件管理。
Jenkins configuration as code實踐一切配置即代碼,用戶可通過編寫YAML腳本來對接插件、安全工具、檢查工具、文檔服務等,任何工具或者服務均可以通過腳本來實現對接。基于此,用戶可以對版本控制、代碼審計、滾動部署等環節跟蹤查看,精確追溯插件集及其版本,使用戶對各種更改更有信心。
隨著新型云操作系統kubernetes的興起,用戶需要跟進學習一大堆新知識、工具和服務,比如如何往容器遷移,如何安裝和實施k8s,如何將容器安裝到k8s,k8s的生態系統和工具鏈對比選型等等,總而言之,適配Kubernetes絕非易事。Jenkins X致力于提供持續交付云原生應用的最佳實踐,涵蓋構建、測試、審查、變更、協作等各種最優產品。
華為云DevCloud Cloudpipeline實踐分享
此外,會上華為專家還向與會者介紹了DevCloud Cloudpipeline實踐。華為云專家講道,華為研發模式先后經歷了手工作坊、IPD、測試自動化工廠、CI、CD、DevOps等各種研發模式的變遷,隨之進行了對應的組織和流程變革,并產生了相應的工具平臺來承載這些模式的落地和運行。隨著研發模式、組織、流程、工具的不斷變革,產品交付效率大幅提升,TTM時長從過去的1~1.5年縮短至2~6周。一些偏互聯網化的產品,迭代周期縮短至1周,每天可以并行發布多個微服務。
在這個過程中,自動化的持續交付流水線平臺/服務,是最核心的工程實踐。基于流水線,以代碼提交到上線的端到端交付周期的縮短作為目標驅動,使得各服務自動化能力和并發效率實現大幅提升改進,比如手工轉自動化測試、容器化構建、基礎設施即代碼、容器化部署、灰度發布服務等,確保產品最終的可重復、可靠的快速迭代發布。
華為內部8萬研發員工,最初使用的基本都是商用開發工具,而這些工具很難滿足產品敏捷交付的需求,畢竟產品的敏捷和快速迭代,有賴于工具平臺的敏捷和快速迭代能力的支撐。因而全面轉向了開源,并在保證100%兼容原生開源系統的同時,進行云化、服務化、單點登錄、多region、高并發、高可靠、高安全、面向不同行業和解決方案場景等方面持續強化,構筑產品核心競爭力。
當華為意識到,華為內部面臨的軟件持續交付工具鏈搭建、運維的核心痛點,其他企業也會面臨時,便將工具鏈對外提供服務。希望通過可視化、靈活編排的自動化持續交付流水線及DevOps工具鏈,實現不中斷業務升級,產品分鐘級發布上線,助力企業大幅縮短交付周期,提升交付效率和產品質量。
華為產品團隊和代碼規模跨度極大,一些典型的大產品,代碼量達1000+萬行,團隊規模也達1000+人,不僅組件多,團隊也多,相互依賴更多。同時,華為大平臺戰略帶來一個現象,就是產品通常依賴于另外一個獨立BG下的一個大平臺產品,且業務BG內部還會有自己的小平臺產品,這樣導致一個產品會依賴于好幾個不同團隊交付的不同平臺。而由于產品規模太大,業務特性達數千個,模塊也往往達到數十上百個。不同部門使用的環境和組網也會存在極大差異。
在這種復雜的環境下,華為構建了分層分級持續交付流水線,分為個人級、項目級、子系統級、產品級(版本級)、解決方案級等數級流水線,通過流水線編排工作流、觸發下一級流水線的執行來保障產品團隊和組件之間的協同交付。
在這個過程中,配套L1-L4分級測試模型,在不同層級流水線執行不同的自動化測試策略,并設置每個階段任務對應的質量門禁來判斷是否允許流水線繼續執行。通過多級流水線的層層防護,使得缺陷發現前移,有效保障了產品質量。
對應于最新的微服務化的產品形態,配套提供了微服務持續交付流水線模板。區別于傳統產品持續交付流水線,微服務流水線在角色權限上匹配全功能團隊全棧工程師的角色權限模型,SDE可以從代碼提交并端到端執行流水線直至微服務發布上線。同時,構建出鏡像,并實施容器化部署、灰度發布策略、失敗自動回滾策略,微服務可按天、按小時甚至分鐘級灰度發布上線。
針對靜態資源提供了持續部署流水線,流水線從軟件包變更開始執行,到跨多region并行部署,實現多區多服務器的靜態資源包自動更新。
在相關配套技術和服務中,灰度發布能力、極速構建、基礎設施即代碼、配置即代碼、Docker、K8s、自動部署、自動化測試、CloudPipeline CDDL(Continious Deliver Domain Language)描述文件等尤為關鍵。灰度發布、藍綠部署等策略可以確保不中斷服務升級。增量構建、并行構建、依賴預讀與緩存、容器化slave等不斷提升構建速度,從小時級進入分鐘級。通過容器化技術使得環境標準化,有效消除DTAP四大環境間的差異,減少環境配置、部署和問題定位成本。CDDL描述語言定義流水線的編排和各服務接入標準。人工審核可以在自動化能力未達到完全保障質量的情況下,增加評審人來把控下發布質量。
自動化一切、代碼化一切、服務化一切、版本化一切、數據化一切、可視化一切,是流水線和DevOps平臺的基本方向。未來還會包括智能化一切。同時,DevCloud流水線支持百萬級并發調度能力能力,并提供可視化看板,和任務健康度(執行成功率)、及流水線整體、階段、任務三級執行時長直觀展示。
在DevCloud on DevCloud的dogfooding吃狗糧實踐分享中,提及在傳統自動化測試理念上,探索在線測試的新方法和理念、實踐,并逐步加大在線測試比重,以便進一步縮短TTM、提升產品質量。
在演講末端,華為專家基于現網進行了“一次修改如何快速上線”的實戰演示,這種基于現網的現場演示,是需要十分的底氣和自信的,也彰顯了DevCloud華為軟件開發云服務的質量可信度。
華為正致力于Jenkins網站的中文本地化工作,且一直以來雙方共同探索在社區等各方面更深層次的合作,希望Jenkins和DevCloud華為軟件開發云服務能夠共同為大家提供更好的持續交付流水線服務。
最后,“The more you build quality into systems — through automation & shorter cycle times — the more you increase throughput & stability”,用流水線所承載的快速、可靠、可重復的持續交付使命作為結束吧。