關注嘉爲科技,獲取運維新知數據庫
前面一篇文章《藍鯨DevOps深度解析系列(1):藍盾平臺總覽》,咱們總覽了藍鯨DevOps平臺的背景、應用場景、特色和能力;安全
接下來咱們繼續解析藍盾平臺的核心組件——流水線引擎。本文介紹的是藍盾流水線的用戶體驗,爲了讓你們有更直觀的感覺,因此圖片較多,請諒解。架構
傳統的瀑布式軟件開發模型在需求明確、業務穩定的項目中,有着明顯的優點;而面對需求頻繁變化的項目、持續迭代的互聯網產品,敏捷開發方法正好適合。運維
DevOps則幫助開發、測試和運維團隊共同建立了一個強大的、可預測的軟件交付方式。工具
DevOps強調「將軟件建設的全部環節進行自動化&全面監控」,也就是使用正確的持續集成(CI)和持續交付(CD)工具集,把持續交付的過程變得自動化,更快速、可靠;而且將過程數據進行儘量完整的數據採集和分析,用於持續的精益改進。性能
實現這一切的核心是實現高效交付的自動化流水線。根據《2018全球DevOps現狀調查報告》,基於 DevOps 改進了軟件交付效能的精英組織相比低效組織來講,吞吐量和可靠性的提高,流水線居功至偉。單元測試
在騰訊互動娛樂事業部(IEG),龐大的持續部署和持續集成、持續運營的需求,驅動着流水線也經歷了兩條不一樣主線的發展:學習
1) CD/CO流:從自動化應用部署和發佈工具,到通用的運維平臺支撐部署和運營做業流水線測試
時至今日,騰訊IEG運營的六百多款產品使用的語言、技術架構、數據庫、運行環境差別化仍然很是大。面對每一個產品的部署發佈、運營做業的編排和執行須要,擺在面前有兩條路能夠選擇:優化
● 爲每一個產品的部署發佈、運營場景定製開發特定的工具,一個個工具變成一個個煙囪,開發團隊須要面對不一樣的需求疲於奔命;
● 創建技術運營的體系,將平臺的建設和運營場景的建設分開,平臺建設團隊不斷的豐富平臺能力,產品運營團隊基於平臺以組裝的方式來實現部署發佈和運營場景。
若是咱們爲數百款產品開發數百個部署、運營工具平臺,那麼數百款產品的運維、運營工具的開發,會致使巨大的成本、穩定性問題。
顯然,創建技術運營體系這條路是不得不走的路,這個平臺也就是誕生於IEG的藍鯨平臺。藍鯨平臺的介紹文章頗多,在此不作詳細的介紹。
2) DevOps流:從基於Jenkins的持續集成流水線,到自研的強大流水線引擎
不管是在初創公司仍是大型企業,在須要持續交付的項目/產品研發中引入DevOps均可以減小人爲錯誤的發生。
該模型容許研發維持質量,同時加快端到端快速交付流程。在DevOps體系中,流水線結合研發效能工具能夠幫助企業建立本身的快速交付管道。
DevOps落地過程當中,最關鍵的、同時挑戰最大的是構建自動化持續交付流水線。
自動化持續交付流水線涉及到代碼拉取、代碼靜態分析、編譯構建、單元測試、製品歸檔、自動化測試、安全掃描、壓力測試、部署測試環境、部署預發佈環境、發佈等等環節的串聯和自動化執行。
建設企業級的統一DevOps平臺,開源的Jenkins 流水線在性能、可擴展性、穩定性、安全性、用戶體驗方面都存在明顯的不足,踩過了若干坑以後騰訊IEG不得不從新設計了流水線引擎,並且它必需要比Jenkins更爲強大,纔能有存在的價值。
若是流水線引擎不能帶來良好的用戶體驗,不能適應各類場景下的流水線靈活編排,那麼它和執行腳本有什麼區別?
在用戶體驗方面,藍盾的流水線能夠說作到了極致,本文就從用戶體驗着手,來初步解析藍盾流水線:
1) 輕鬆簡單的流水線編排
藍盾流水線讓用戶不須要學習Jenkins的Pipeline語法,也不須要過於關注和工具平臺如何對接。
圖形界面的可視化的流水線設計,靈活組裝各類原子,配置化原子設置,下降了使用難度,也減小了腳本難以調試、容易出錯的問題。更不會出現人員更迭致使沒法維護的問題。
下面的流水線示例,各一個縱列是一個階(Stage),每一個塊是一個任務原子(Task),近百種原子模板能夠根據業務的需求,靈活組裝出各類流水線,對接各類工具實現CI/CD環節的各類功能和流程。
咱們能夠從空白模板開始建立流水線,也能夠從流水線模板庫中的模板來創建流水線。模板能夠預先設置好流水線的階段、構建環境、原子類型等,下降流水線編排的難度。模板能夠由用戶本身來建立。
流水線能夠把任務分爲多個階段(Stage),每一個階段(Stage)下面,還能夠有多個並行的做業(Job),每一個做業均可以指定不一樣的構建環境,咱們能夠在構建階段並行進行不一樣的構建環境下的程序的構建,例如:後臺服務、Web端、移動端。每一個做業下面,還能夠有多個串行執行的任務原子(Task)。
每一個任務原子都是能夠配置的,每一個原子模板都有特定的功能,咱們能夠選擇任何一種原子類型下面的原子模板。藍盾內置了近百種原子模板供咱們選擇和組裝,若是沒有知足的原子,也容許用戶本身擴展開發。
例如,咱們選擇了拉取GitLab倉庫代碼原子模板,咱們就能夠直接在圖形界面進行原子的參數化配置GitLab代碼倉庫的信息,流水線執行到該原子時,就會根據配置自動的從指定代碼倉庫拉取指定版本的代碼。
若是咱們選擇了代碼檢查任務模板,咱們就能夠配置代碼檢查執行任務中的語言和代碼檢查工具;流水線執行到該原子時,就會啓動代碼檢查平臺按照指定的設置開展代碼掃描了。
2) 直觀清晰的流水線跟蹤
流水線被執行以後,咱們須要瞭解流水線的執行狀況,例如:成功與否、耗時、日誌;咱們還須要拿到流水線執行的產出物(即製品包)、報告(代碼檢查報告、單元測試報告)。過往這些信息每每是散落在不一樣的工具平臺中的,給咱們的實際工做帶來不少沒必要要的困擾。
上圖中,流水線的每次執行的結果,均可以在執行歷史中被展現出來。包括:啓動時間、構建序號、耗時、版本號、觸發方式和執行人等。若是須要看更加詳細的信息,咱們能夠點擊其中一次記錄,就能夠看到該次執行的具體信息。
若是有異常,流水線會自動中止和發送通知,在執行結果界面清晰的標識出哪一個原子出現了異常。
若是須要進行更進一步的瞭解原子的執行狀況,在執行結果中點擊任何一個原子,咱們能夠深刻查看和分析該原子更細節的日誌,例如:
在「查看構件」標籤頁,咱們能夠直觀看到本次流水線執行生成的製品包,若是有須要能夠直接下載到本地或者查看元數據,而不是須要到切換到製品倉庫軟件中去查找。
在「代碼變動記錄」頁,咱們直接能夠查看到本次流水線的執行涉及的代碼變動版本號範圍以及具體的Commit信息,能夠用於追蹤產出的新的版本,涉及了哪些需求或變動、缺陷的修復。
在「產出物報告」標籤頁中,集中展現流水線中各個環節產生的報告,例以下面的代碼檢查原子產生的代碼檢查報告。
以及在單元測試環境產出的單元測試報告。
3) 流水線的設置
在流水線的設置中,咱們能夠配置流水線的運行鎖定、通知設置、權限設置等。例如:能夠設置流水線在同一時間能夠運行一個或多個實例。
流水線在構建成功或失敗時,對哪些人進行某種方式的通知。
從上述信息能夠看到,藍盾流水線的用戶體驗能夠說超越了全部的其餘流水線工具,這種用戶體驗帶來的不僅是界面好看自己,而是藍盾產品團隊對DevOps的更多考慮:
● 藍盾做爲企業級的DevOps平臺,咱們但願的是靠平臺的強大、極致的用戶體驗吸引各個研發團隊將研發流程遷移到平臺上,而不是經過行政命令要求各個團隊必須使用藍盾DevOps平臺;行政命令則可能會帶來用戶反彈和博弈,而藍盾是一個能「潤物細無聲」的幫助企業把DevOps研發標準、規範體系推廣到全企業的研發效能平臺;
● 用戶體驗毫不只是「界面好看」四個字所能歸納的,極致的用戶體驗是創建在對市場競品的調研和分析,對龐大的DevOps團隊用戶進行調研和分析,對平臺的不斷優化和打磨,對藍盾工具鏈的各個工具進行深度打通等等的基礎之上;平臺的功能、穩定性、擴展性等必須作到極致,纔是用戶體驗能達到極致的前提;
● 用戶體驗不該只是帶來用戶的方便,直接或者間接帶來的更可能是:學習成本的下降、研發效能的提高、交付頻率更高、交付時間更短,因爲流水線編排出錯致使的部署失敗、運行事故下降到極低,因爲人員變更帶來的影響更小;IT團隊在DevOps項目中的參與度更高、團隊更加穩定,能夠有更多的精力放在業務層面的運營和優化中。
未完待續,敬請期待……