甲骨文容器化持續交付平臺的實踐

​在 JFrog SwampUp 2017 用戶大會上,甲骨文的持續交付團隊成員 Viraj 爲大家帶來了甲骨文內部基於容器化的 DevOps 最佳實踐。

團隊背景

Viraj 的團隊是負責甲骨文內部的持續交付流水線平臺的建設,提供構建 Farm,測試 Farm,提供 DSL 支持持續集成,使用 Docker 進行測試和生產環境的發佈。

由於甲骨文內部產品線龐大,並且甲骨文一直在收購各種軟件開發公司,所以 Viraj 得團隊需要支持很多語言的開發,包括 Java,C++,Go,Python,Perl,Shell 等等。涉及到的工具包含 Jenkins,Docker,Artifactory,Carson,Kubernetes,Mesos,Logstash 等等。

和其他公司的 DevOps 團隊有什麼不一樣?
基於持續集成和測試的自動化運維。
所以開發者參與自動化測試案例的編寫,包括單元測試,功能測試,集成測試,端到端測試。
數據驅動 - 使用大量數據和可視化報表幫助決策和定位問題。

甲骨文的痛點

甲骨文全球有數萬人的研發團隊,在爲整個公司搭建統一的持續交付平臺的過程中,需要解決以下問題:

容器化

使用 Docker 的原因:
公司內部混合雲的使用,導致環境難以做到一致性。
VMware 的 License 太貴。
來自測試團隊的壓力。

同時還需要適應研發的用戶場景:

需要實現應用程序的打包,將環境變成不可變基礎設施,從而屏蔽軟件運行環境的差異性,降低軟件部署的難度。
持續集成。將所有變更都發布到容器裏,讓 Docker 鏡像成爲軟件發佈的最小原子化單元。
讓計算資源利用率最大化。實現100%的利用率,之前使用 VMware 只能達到5-10%。
用戶能夠實現 DIY 的 PAAS 平臺,例如自行搭建 Load Balance。

需要支持多語言環境

從上圖可以看到甲骨文 DevOps 團隊需要支持多語言的倉庫,包括 Maven,Python,Docker,NPM,Nuget,維護每種語言的倉庫工作量非常大,需要爲每種倉庫搭建負載均衡,配置權限,軟件更新,數據備份等等。所以甲骨文使用 Artifactory解決多語言倉庫的問題。爲什麼?
使用 Artifactory 作爲全語言的倉庫,並且利用它做包的併發下載,高可用,數據複製和數據備份。
在某種語言倉庫上開發了 API,可以被重複的利用到各種語言倉庫。

容器化持續交付平臺建設

甲骨文持續交付的創新

從上圖可以看到傳統的持續交付流水線是在 Jenkins 裏爲每個項目獨立的維護一個項目,可複用性很差。

甲骨文的最佳實踐:
將傳統的 Jenkins 流水線拆分成多個 Stage。
建立通用,標準的任務步驟。
使用 Event Broker 進行任務直接的通信調度。
大量使用運行在 Docker 裏的併發任務,縮減構建,測試時間。
Jenkins 的 Slave 節點運行在 Docker 裏,用完即銷燬,釋放資源供其他任務使用。

甲骨文的平臺提供自助式的 CICD 編排工具 Carson:

平臺爲開發者提供了自助式的 CICD 流水線編輯器,用戶可以自定義任務,複用已有任務,支持並行和串行任務。每個任務可以是在某個 Docker 容器裏獨立運行,將構建的產出物上傳到 Artifactory,並記錄構建信息,測試結果,部署信息。用完即銷燬。

CICD 數據的可視化:

如何找出現有 CICD 流程裏,哪裏可以改進?最難的在於如何發現問題?發現了問題才能解決問題,而這些問題的暴露,依賴於將流程可視化的工具。

甲骨文提供的 CICD 流程可視化的工具,能夠展示每個任務的構建時長,代碼掃描的結果,測試的時長和結果等等,將問題暴露在每個團隊成員中,讓團隊成員都能瞭解軟件發佈的瓶頸在哪,這樣纔能有效的提高軟件發佈的質量。

用這些可視化的數據,來度量 DevOps 獲得的收益,包括測試通過率,構建成功率,構建速度,發佈週期,資源分配情況,基於數據做出正確的決策,纔是 DevOps 帶來的價值。

解決了 Docker 的問題

Docker 的發佈速度和其他語言包管理工具的發佈速度不一致,所以甲骨文將 Docker 鏡像倉庫放在了一個獨立的 Artifactory 倉庫裏,隨時更新最新版本的 Docker。
Docker V1 的API 在刪除鏡像時,存在無法在不停服的情況下刪除物理空間的問題。所以甲骨文將所有鏡像中心升級到了 V2 版本。

總結和展望

目前 Docker 的使用情況

甲骨文是較早的 Docker 容器化實踐者,目前甲骨文內部的 Docker 鏡像存儲已經非常大。
80TB 的總存儲量。
每個 Docker 鏡像註冊中心(Artifactory) 4TB。
存儲了50萬個 Docker 鏡像。
每個鏡像倉庫包含300個 Tag。
使用 Artifactory 每天清理數十 TB 的鏡像文件。

基於甲骨文內部的 Docker 容器化實踐,甲骨文也推出了容器雲(Oracle Container Cloud Service:https://cloud.oracle.com/container),對外提供服務

未來展望

讓更多的團隊使用統一的持續交付流水線。
將所有的測試放在 Docker 裏運行。

將所有的部署放在 Docker 裏進行。
使用 Bintray 進行包的分發部署。

下載JFrog Artifactory 開源版(代替 Nexus):
http://www.jfrogchina.com/open-source/

下載JFrog Artifactory 企業版(免費試用):
https://www.jfrog.com/artifactory/free-trial/?lang=zh-hans#High-Availability

關於JFrog
世界領先DevOps平臺
公司成立於2008年,在美國、以色列、法國、西班牙,以及中國北京市擁有超過200名員工。JFrog 擁有4000多個付費客戶,其中知名公司包括如騰訊、谷歌、思科、Netflix、亞馬遜、蘋果等。關注 JFrog,感受原汁原葉的硅谷技術!我們不僅僅提供最優秀的產品,也提供最優秀的持續交付平臺的解決方案,詳情請洽[email protected]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章