Hi , Caicloud 宣佈開源其 CI/CD 平臺 Cyclone,專一解決微服務架構下面向容器的 CI/CD 和版本管理問題。 Cyclone 項目是基於 K8S 的第一個 CI/CD 工具,完善了 K8S 生態圈。 Cyclone 在 Github 上的地址: https://github.com/caicloud/cyclone ,歡迎試用!git
關於 CI/CD 背景知識github
持續集成( CI )是一種軟件開發實踐,即團隊成員常常集成他們的工做,每次集成都須要經過自動化的構建,包括編譯、發佈、自動化測試來驗證,從而儘早的發現集成錯誤。持續交付( CD )是指頻繁地將軟件新版本交付給質量團隊(或者用戶)以供評審。若是評審經過,那麼就發佈到生產環境。每當代碼庫裏有一個變化,若是能自動且隨時觸發以上過程,那就達成了持續發佈( CD )。web
Docker 是一款基於 LXC 的容器引擎,自 2013 年開源以來,由於其易用性、高可移植性在開源社區很是火熱。 Docker 將軟件與其依賴環境打包起來,以鏡像方式交付,讓軟件運行在「標準環境」中,這很是符合雲計算的要求。各大 IT 巨頭紛紛跟進,基於 Docker 容器技術創業公司也如雨後春筍, Docker 創造了一個嶄新的容器雲行業。 Docker 技術應用普遍。如,利用其隔離特性,爲開發、測試提供一個輕量級獨立沙盒環境進行集成測試。加速本地開發和構建流程,使其更加高效輕量化,開發人員能夠構建、運行並分享容器,輕鬆提交到測試環境中,並最終進入生產環境。安全
Caicloud 的容器雲 CI /CD 實踐架構
Caicloud 做爲國內領先的容器集羣服務解決方案供應商,向用戶提供企業級的 Claas 、 Containerizor 、 Cyclone 、 Cargo 、 Cubernetes 、 Clever 六大閉環服務。負載均衡
Cyclone 做爲其中重要一環,是基於 Docker 容器沙盒隔離特性實現的持續集成,將軟件與其依賴環境打包起來,以鏡像方式交付,讓軟件運行在「標準環境」中,原生支持多種容器雲平臺持續交付的工具。具備如下特性:socket
全部編譯、構建、測試、發佈過程均以容器爲載體,消除環境差別性。經過版本控制工具觸發流水線持續集成;分佈式
生成容器鏡像並輸出安全報告,確保構建的鏡像安全可靠。全過程可視化,契合團隊協做,提升研發效率;微服務
管理組件支持微服務多組件聯合發佈,使用圖形化界面展現組件的依賴關係及聯合發佈的過程和狀態,應用拓撲關係圖形化;工具
基於發佈策略和角色控制功能,提供靈活的持續部署方式。基於容器和鏡像的版本控制,提供多種升級回滾策略。
Cyclone 實現原理
CI/CD 工做流
Cyclone 提供了豐富的 API 供 web 應用調用,經過 API 創建版本控制系統中代碼庫與 Cyclone 服務關聯關係後,版本控制系統的提交、發佈等動做會經過 webhook 通知到 Cyclone-Server ,啓動一個基於 Docker in Docker 技術的 Cyclone-Worker 容器,在該容器中從代碼庫中拉取源碼,按照源碼中 caicloud.yml 配置文件,依次執行:
PreBuild :在指定編譯環境中編譯可執行文件;
Build :將可執行文件拷到運行環境容器中,打成鏡像發佈到鏡像倉庫中;
Integretion :使用 Build 階段構建的鏡像啓動一個容器,啓動持續集成所依賴的微服務容器進行集成測試;
PostBuild :啓動一個容器執行一些腳本命令,實現鏡像發佈後的一些關聯操做;
Deploy :使用發佈的鏡像部署應用到 Kubernetes 等容器集羣 PaaS 平臺。
構建過程日誌能夠經過 Websocket 從 Cyclone-Server 拉取;構建結束後 Cyclone-Server 將構建結果和完整構建日誌經過郵件通知用戶。
軟件架構
Cyclone 軟件架構以下圖所示。每一個立方體表明一個容器。
Cyclone-Server 中 Api-Server 組件提供 Restful API 服務,被調用後須要較長時間處理的任務生成一個待處理事件寫入 etcd ;
EventManager 加載 etcd 中未完成事件,監視事件變化,發送新增待處理事件到 WorkerManager 中; WorkerManager 調用 Docker API 啓一個 Cyclone - Worker 容器,經過環境變量傳入須要處理的事件 ID 等信息;
Cyclone-Worker 使用事件 ID 做爲 token (有效期 2 小時)調用 API ,拉取事件信息依次啓容器執行 integration 、 prebuild 、 build 、 post build ,完成後反饋事件執行結果,構建過程日誌推送到 Log-Server ,轉存到 Kafka ;
Log-Server 組件從 Kafka 拉取日誌推送給用戶;須要持久化的數據存入 Mongo 。
Cyclone 也能夠多節點分佈式部署,部署圖以下所示。每個立方體表明一個節點,使用 Haproxy 反向代理實現負載均衡和 SSL 數據加密,分發 API 請求到各 Cyclone 節點中。
Roadmap
Cyclone 由 Caicloud 工程師自主研發,並貢獻給社區(地址: https://github.com/caicloud/cyclone )。 Cyclone 現已實現基本功能發佈早期版本 V0.1 。咱們計劃在 2016 年 12 月底發佈 V0.2 Kubernetes 版 Cyclone ; 2017 年第一季度發佈 V0.3 提供 web 操做界面,後續還會開發用戶權限管理,用戶插件支持等功能。
掃描二維碼進入到 Cyclone 社區