一、DevOps是什麼?
DevOps 是 Development 和 Operations 的組合詞。它是一組過程、方法與系統的統稱,用於促進開發(應用程式 / 軟體工程)、技術運營和質量保障(QA)部門之間的溝通、協作與整合。
它是一種重視“軟體開發人員(Dev)”和“IT 運維技術人員(Ops)”之間溝通合作的文化、運動或慣例。透過自動化“軟體交付”和“架構變更”的流程,來使得構建、測試、釋出軟體能夠更加地快捷、頻繁和可靠,把敏捷開發部門和運維部門之間的圍牆打通,形成閉環。
在 DevOps 流程下,運維人員會在專案開發期間就介入到開發過程中,瞭解開發人員使用的系統架構和技術路線,從而制定適當的運維方案。而開發人員也會在運維的初期參與到系統部署中,並提供系統部署的最佳化建議。
二、為什麼會出現DevOps?
我覺得根本原因有如下幾點:
1、容器化技術的發展,微服務架構的發展,直接促進了DevOps的迅速發展
2、敏態需求的增加,即探索性工作的增加
軟體開發從傳統的瀑布流方式到敏捷開發,再到現在對敏捷開發提出了更高的要求,近些年創新型的應用不斷湧現,在這些應用的研發過程中多采用小步快跑、快速試錯的方式,這些探索性工作要求運維能夠具備一天釋出多次的能力,需要企業完成由穩態到敏態的轉變。
3、軟體開發活動在企業經營活動中佔比的不斷增加
業務發展對軟體的依賴由輕度依賴、中度依賴發展到目前的重度依賴。
4、企業存在對消除浪費的需求
軟體開發活動在企業中的位置越來越重要,而像企業經營活動一樣,軟體開發活動中也存在著許多的浪費,企業管理上必然存在著 「識別並消除浪費」 的需求。
軟體開發中的浪費包括不必要和必要的浪費,不必要的浪費有:無人使用的功能、軟體bug、等待測試、等待審批等;必要的浪費包括:工作項移交、測試、專案管理等。
三、DevOps的優勢
工程效率提升50%,這是一個真實的案例。
DevOps 的主要優勢在於,自動化流程可以比人員更快,更可靠地執行重複操作。對於組織而言,讓開發人員或其他人員整天構建和部署程式碼既不可行,也無濟於事。使這些重複性任務自動化可以使開發人員騰出精力去做自己最擅長的工作 ~ 修改程式碼。
這樣做是允許在幾分鐘之內構建和部署程式碼,這僅受組織選擇管理其DevOps管道的方式的限制。這意味著從開發功能或錯誤修正到向終端使用者提供更好的體驗之間的時間可以大大縮短,從而使使用者更加滿意。
它還建立了更好的反饋迴圈。新功能越早交付給使用者,組織就越早可以收集反饋和指標並深入瞭解使用者對其產品的喜好。這使組織保持敏捷併為創新提供了更好的環境。
四、DevOps生命週期
DevOps生命週期主要包括產品(策劃、研發、運營、推出)、專案(立項、執行、完工),而敏捷、持續整合、持續部署、持續交付都是 DevOps 的一個區域性的階段。
DevOps 在支援全生命週期的過程,要以產品的視角來看待,真正進行交付的時候,也要以產品為維度進行組織的設立。
DevOps 的核心是一組工具和實踐,可幫助組織更可靠,更快地構建,測試和部署軟體。DevOps 使組織能夠比具有傳統開發和釋出週期的組織更快地發展和交付其產品,從而可以提供競爭優勢。與其每天兩週或更長時間釋出一次版本,不如每天向使用者交付新功能,並且可以在數小時內部署錯誤修正,所有這些都遵循相同的可重複自動化流程。
五、DevOps三大原則
1、流動原則
「加速」 從開發、運維到交付給客戶的流程;
堅持少做,產品開始開發時採用 MVP 原則,產品迭代時要適時做減法;
持續分解問題,大的變更或需求拆解為一系列小的變更,快速解決;
工作視覺化,採用 Sprint 看板將工作視覺化;
控制任務數量,減少前置時間,降低測試人員的等待時間;
減少交接次數,減少不必要的溝通和等待;
持續識別和改善約束點,提高搭建環境、需求文件、QA、開發、運維的生產力;
消除價值流中的困境和浪費;
2、反饋原則
建設 「安全可靠」 的工作體系;
在複雜系統中安全地工作;
及時發現問題;
在源頭保障質量;
為內部客戶最佳化工作;
3、持續學習與實驗原則
採用科學的工作方式,將對組織的 「改進和創新」 作為工作的一部分。
建立學習型組織和安全文化;
將日常工作的改進位制度化;
把區域性發現轉化為全域性最佳化;
在日常工作中注入彈性模式;
領導層強化學習文化;
六、快速實現DevOps
開發人員完成了為其小部件的新功能編寫程式碼。他們將程式碼提交到功能分支,該功能分支在其開發計算機上啟動了一些輕量級測試,檢查是否存在任何程式碼樣式問題,同時還掃描具有新公開的安全漏洞的軟體包。開發人員提交拉取請求以將其程式碼合併到程式碼儲存庫中,該程式碼儲存庫向團隊聊天傳送通知。
團隊中的另一位開發人員檢查了程式碼更改,在發現程式碼中沒有問題之後,批准了請求請求。該程式碼會自動合併到開發分支中,從而開始構建過程。構建伺服器將克隆 developer分支,安裝所有軟體包依賴項並構建視窗小部件。生成伺服器會執行單元測試和整合測試,以確保新功能不會在小部件的其他部分引起任何退步。
每個測試都透過了,構建成功。根據程式碼庫中定義的最佳實踐配置,將在雲中自動配置一個新容器,並部署小部件。
此時,組織有兩個選擇。他們可以選擇將更新後的視窗小部件自動釋出到生產環境中,並使所有使用者或選擇接收最新功能的部分使用者可以使用該功能。自動部署到生產中稱為連續部署(CD)。
或者,組織可以選擇僅將功能釋出到使用者驗收測試(UAT)環境中,然後根據預定義的時間表手動批准將釋出釋出到生產中。在管道中新增手動審批流程通常稱為“持續交付”(CD的另一種形式)。
無論是否涉及手動步驟,一旦將小部件成功部署到生產中,都將執行附加的自動化測試。其他工具收集有關效能和使用者行為的指標,這些指標將提供給IT運營和開發團隊,以提供實時反饋,突出顯示潛在的錯誤並幫助塑造新功能。
對於基本的 DevOps 管道,這是一個相當典型的過程,但具體細節取決於組織。
一些組織傾向於在生產環境中快速部署,將新功能隱藏在功能標記後面,以允許向使用者群分階段釋出。其他人則更喜歡使用更傳統的開發,測試和生產環境結構,在此結構中,功能被批次部署並在部署到生產之前透過多個手動門緩慢釋出。
DevOps 可以根據組織或專案的特定需求進行定製。
該過程趨於發展,新增其他測試以生成更安全的應用程式,或找到最佳化管道以加快構建速度並減少人工干預的方法。