CI/CD如何支撐運維自動化

語言: CN / TW / HK

運維思索


運維工作中的重複性工作有哪些?

新服務器上架,與CMDB、監控、堡壘機聯動同步;
操作系統初始化,包括用户、內核、安裝源、規範目錄、安全基線等;
基礎組件初始化,包括Java環境、Pyhon環境、Nginx等各種組件;
應用版本發佈、回滾,此過程與監控聯動;
應用管理操作,如啟動、停止、重啟等;
監控系統與應用相關監控項的創建、禁用、啟用等;
……
上述這些重複性的工作會零碎的分散在我們日常的運維過程中,我們有什麼辦法能夠通過自動化的方式來處理這些瑣碎的事情呢?

我的解決方案就是藉助Jenkins 通過CI/CD的方式來實現運維自動化。之所以選擇Jenkins,不只是因為其能夠通過各種插件實現各種工具的集成,更重要有以下幾點:

BlueOcean

Jenkins官方從用户角度出發,可使複雜的pipeline可視化,快速直觀地理解管道狀態。

擴展共享庫

通過共享庫可以實現多個項目之間共享流水線,有助於減少宂餘並保持代碼乾淨整潔。

Pipeline

流水線既可以作為job獨立執行,也可以作為一項任務被其他流水線調用。

總結以上兩點:

BlueOcean滿足了我對可視化管理界面的需求,降低了運維開發前端管理界面的負擔,讓我們把精力更多的集中在我們擅長的領域;
擴展共享庫更大程度上滿足了我對運維崗位的理解:二線運維通過共享庫管理提供運維的原子化模塊;一線運維通過pipeline自由組合共享庫中的原子模塊,形成最終的解決方案;
隨着原子化的模塊不斷增多,那麼我們的自動化運維就可以覆蓋更多的場景,後續通過故障自愈的方式接入,那麼就可以給我們釋放更多時間,屆時真正的SRE將不再是夢!

確保長期關注研發工作:Google 將 SRE 團隊的運維工作限制在 50% 以內,剩餘的時間花在研發項目上.
----《SRE: Google運維解密》

擴展共享庫和流水線

如圖,我們通過pipline編排出以下運維場景:

服務器自動上架
基礎組件定製化安裝
Java應用自動上線
Java應用版本發佈
這些場景運行構建時會調用擴展共享庫中多個原子化模塊,為方便區分我們將各個原子模塊針對其功能劃分為以下幾個級別:

操作系統級
Java應用級
Apollo配置中心級
監控系統級
CMDB級
後續我們可根據實際情況自行添加相關原子模塊至擴展共享庫中。

場景自動化實現


1.服務器自動上架


服務器的自動上架更多的是藉助於藍鯨標準運維,但因為服務器自動上架也是運維工作中的常見場景,所有在此進行簡單説明,具體實現請見《藍鯨智雲實現虛擬機交付》、《運維思索:cmdb打通zabbix、jumpserver探索》。

2.操作系統初始化與基礎組件安裝


操作系統初始化與基礎組件安裝藉助於Jenkins + Ansible Playbook實現,同時也可以作為一個job由其他場景進行集成調用。其具體功能實現請見《Jenkins+Ansible:助力基礎設施建設》。

3.Java應用自動上線

Java應用自動上線一般在應用第一次上線時使用,目的是在明確的運維規範前提下,能夠快速上線應用。此過程我們主要使用的時pipeline job 及擴展共享庫中的原子模塊:

CMDB級模塊:根據應用名獲取應用IP;
pipeline job:基礎組件初始化;
apollo配置中心級模塊:配置發佈;
Java應用級模塊:應用版本發佈、健康檢查及應用啟停等;
監控系統級模塊:監控項新增;
通過這一些列的搭配,我們實現了Java應用自動上線的運維場景。

4.Java應用版本發佈

Java應用版本發佈包含發佈、回滾兩部分,在此我們統一以發佈為準。此過程主要使用的是擴展共享庫中的原子模塊:

CMDB級模塊:根據應用名獲取應用IP;
apollo配置中心級模塊:配置發佈;
監控系統級模塊:屏蔽監控;
Java應用級模塊:應用版本發佈、健康檢查及應用啟停等;
監控系統級模塊:恢復監控;
由於版本發佈在各公司的具體流程有所不同,在此我們需要根據實際情況自行調整,將流程中缺失的環節可以做成原子模塊增加到擴展共享庫。

總結


CI/CD不僅能夠在企業DevOps進程中發揮重要作用,其實在運維自動化過程中也能做到足夠有效的支撐。因此如果我們只將其當作成一個打包工具就大錯特錯了,其帶給我們思想上的轉變則更加有意義。
————————————————

 

文章來自網絡,如有侵權,將第一時間刪除內容。
文章作者:CSDN博主「木訥大叔愛運維」
原文鏈接:https://blog.csdn.net/yanggd1987/article/details/121750197