什麼是 DevOps?
了解 DevOps 如何整合人員、程序和技術,以便更快速地為客戶提供更好的產品。
DevOps 定義
DevOps 是開發 (Dev) 和作業 (Ops) 的複合服務,也就是人員、程序和技術的聯合,可持續地為客戶提供價值。
DevOps 對小組來說,代表了什麼意義? DevOps 能讓先前各自獨立的角色 (開發、IT 作業、品質工程和安全性) 互相協調並共同作業,以生產更好且更可靠的產品。藉由採用 DevOps 文化特性和 DevOps 做法與工具,小組能更妥善回應客戶需求、對其建置的應用程式更有信心,並更快地達成業務目標。
DevOps 的優點
採用 DevOps 文化特性、做法和工具的小組可獲得更高的效能,也能更快地建置更好的產品以提高客戶滿意度。這種改進的共同作業和生產力,也是達成下列業務目標所需的功能:
縮短上市時間
適應市場與競爭
保持系統穩定性和可靠性
改進平均復原時間
DevOps 和應用程式生命週期
DevOps 會從整個規劃、開發、傳遞和作業階段影響應用程式生命週期。每個階段都依賴於其他階段,且這些階段並不特定於角色。在真正的 DevOps 文化特性中,在某種程度上,每個角色都會參與每個階段。
規劃
在規劃階段中,DevOps 小組會構思、定義並描述他們正在建置之應用程式和系統的功能。他們會以高低不同的細微性層級來追蹤進度,從單一產品工作到跨多個產品組合的工作。建立待處理項目、追蹤錯誤、使用 Scrum 管理敏捷式軟體開發、使用工作流程看板、透過儀表板將進度視覺化,都是 DevOps 小組規劃彈性和可見性的一些方法。
開發
開發階段包括編碼 (編寫、測試、檢閱和小組成員對程式碼整合) 的所有方面,以及將程式碼建置於可以部署到各種環境的組建成品中。DevOps 小組會在不犧牲品質、穩定性和生產力的情況下尋求快速創新。為了達成此目標,他們使用高生產力工具來將一般步驟與手動步驟自動化,並透過自動化測試與持續整合以小增量的方式進行逐一查看。
傳遞
傳遞是以一致且可靠的方式,將應用程式部署到實際執行環境的程序。傳遞階段也包括部署和設定組成這些環境的完全受控基礎結構。
在傳遞階段中,小組會透過明確的手動核准階段來定義發行管理程序。還會設定自動化閘道,其在各階段之間移動應用程式,直到應用程式可供客戶使用為止。將這些程序自動化,可讓其變得易於調整、重複和控制。如此一來,實踐 DevOps 的小組即可輕鬆、有信心並安心地頻繁傳遞。
作業
作業階段包含在實際執行環境中維護和監視應用程式,並進行疑難排解。採用 DevOps 做法時,小組會致力於確保系統的可靠性與高可用性,並確保零停機時間,同時加強安全性和控管。DevOps 小組會在問題影響客戶體驗之前發現問題,並在問題發生時迅速予以解決。保持這種警覺需要豐富的遙測、可操作的警示,以及對應用程式和基礎系統的完全可見性。
DevOps 文化特性
儘管採用 DevOps 做法可以透過技術來將程序自動化和最佳化,但這一切都始於組織內部的文化特性,以及參與其中的人員。為了克服培養 DevOps 文化特性的挑戰,人員必須在工作與共同作業的方式上做出重大改變。但是,一旦組織致力於 DevOps 文化特性,就能打造可供高效能小組進行開發的環境。
共同作業、可見性和一致性
良好 DevOps 文化特性的其中一項特徵,即為小組之間的共同作業,就從可見性開始。開發和 IT 作業等不同小組必須共用彼此的 DevOps 程序、優先順序和考量。這些小組也必須一起規劃工作,並將與業務相關的目標和成功衡量標準保持一致。
範圍與責任的轉移
隨著小組之間的協調,他們可獲得主導權並參與其他生命週期階段,而不僅限於其角色主要負責的階段。例如,開發人員不僅要對開發階段建立的創新和品質負責,也要對因其改變而在作業階段所帶來的效能和穩定性負責。同時,IT 操作員就會在規劃與開發階段納入控管、安全性與合規性。
較短的發行週期
DevOps 小組透過在短週期內發行軟體以保持敏捷性。較短的發行週期能讓規劃與風險管理變得更輕鬆,因為進度是遞增的,所以也會降低對系統穩定性的影響。縮短發行週期,也能讓組織適應並應對持續變化的客戶需求與競爭壓力。
持續學習
高效能的 DevOps 小組會建立成長心態。他們會快速從失敗中學習,並將經驗融入程序中,且會不斷改進、提高客戶滿意度並加速創新及適應市場。DevOps 是一個旅程,因此始終有成長的空間。
DevOps 做法
除了建立 DevOps 文化特性之外,小組也可以在整個應用程式生命週期中實作某些做法來實現 DevOps。其中某些做法有助於加速、自動化並改進特定階段。其他實務則涉及多個階段,可協助小組建立順暢的程序,並提升生產力。
持續整合與持續傳遞 (CI/CD)
設定管理是指管理包含伺服器、虛擬機器和資料庫等系統中的資源狀態。使用設定管理工具可讓小組以受控的系統化方式推出變更,降低修改系統設定的風險。小組會使用設定管理工具來追蹤系統狀態,並協助避免設定偏差,此偏差是因系統資源設定隨著時間而偏離為其定義的所需狀態所造成。
與基礎結構即程式碼同時實踐,系統定義和設定都可輕鬆進行範本化和自動化,從而協助小組大規模操作複雜的環境。
版本控制
版本控制是在版本中管理程式碼的做法,可追蹤修訂與變更歷程記錄,讓程式碼易於檢閱及復原。此做法通常使用如 Git 的版本控制系統來實作,可讓多名開發人員在撰寫程式碼時進行共同作業。這些系統提供清楚的程序,來合併在相同檔案中發生的程式碼變更、處理衝突並將變更復原為較早的狀態。
使用版本控制是 DevOps 的一項基本做法,可協助開發小組共同作業、在小組成員之間劃分編碼工作,並儲存所有程式碼以便在需要時輕鬆復原。
版本控制也是其他做法中的必要元素,例如持續整合與基礎結構即程式碼。
敏捷式軟體開發
敏捷式開發是一種軟體開發方法,強調小組共同作業、客戶和使用者意見反應,以及透過短期發行週期對變更的高適應性。實踐敏捷式開發的小組,可為客戶提供持續的變更與改進,並收集客戶的意見反應,再根據客戶需求來學習與調整。敏捷式開發與其他較傳統的架構 (例如瀑布方法) 有很大的不同,後者包括由循序階段所定義的長期發行週期。工作流程看板和 Scrum 是與敏捷式開發相關聯的兩種熱門架構。
基礎結構即程式碼
基礎結構即程式碼以描述性方式定義系統資源和拓撲,可讓小組如同編碼一樣管理這些資源。這些定義也可以儲存於版本控制系統中並建立版本,並且可在其中像程式碼一樣檢閱及還原。
實踐基礎結構即程式碼,可協助小組以可靠、可重複與受控的方式來部署系統資源。基礎結構即程式碼也有助於自動部署並降低人為錯誤的風險,特別是針對複雜的大型環境。這種可重複且可靠的環境部署解決方案,可讓小組維護與生產環境相同的開發和測試環境。將環境複製到不同的資料中心和雲端平台,也同樣變得更簡單且更有效率。
設定管理
設定管理是指管理包含伺服器、虛擬機器和資料庫等系統中的資源狀態。使用設定管理工具可讓小組以受控的系統化方式推出變更,降低修改系統設定的風險。小組會使用設定管理工具來追蹤系統狀態,並協助避免設定偏差,此偏差是因系統資源設定隨著時間而偏離為其定義的所需狀態所造成。
與基礎結構即程式碼同時實踐,系統定義和設定都可輕鬆進行範本化和自動化,從而協助小組大規模操作複雜的環境。
持續監視
持續監視表示從執行應用程式之基礎結構到更高層級的軟體元件,全面且即時地了解整個應用程式堆疊的效能和健康狀態。此可見性包括遙測和中繼資料的集合,以及預先定義條件的警示設定,這些條件皆需要操作員注意。遙測是由從系統各個部分收集的事件資料與記錄所組成,其儲存於可進行分析和查詢的位置。
高效能的 DevOps 小組會確保其設定可操作且有意義的警示,並收集豐富的遙測,以便從大量資料中獲得深入解析。這些深入解析有助於小組即時解決問題,並了解如何在未來開發週期中改進應用程式。
DevOps 工具
小組擁有許多 DevOps 工具來協助其在組織中促進 DevOps 文化特性。大多數小組依賴於多種工具,並建置自訂工具鏈以滿足應用程式生命週期中每個階段的需求。雖然採用特定工具或技術與採用 DevOps 並不相同,但是當 DevOps 文化特性已存在並已定義程序時,只要人員選擇適當的工具,即可實作並簡化 DevOps 做法。取得可將 DevOps 付諸實行的工具:
DevOps 和雲端
採用雲端可從根本上改變小組建置、部署和操作應用程式的方式。同時採用 DevOps,可讓小組擁有更多機會來改進其做法,並為客戶提供更佳的服務。
雲端彈性
藉由以無限資源快速佈建並設定多區域雲端環境的能力,小組可彈性部署應用程式。現在,小組不用購買、設定和維護實體伺服器,並在幾分鐘內即可建立複雜的雲端環境,然後在不需要時將其關閉。
Kubernetes
隨著愈來愈多的應用程式使用容器技術,Kubernetes 逐漸成為業界用於大規模協調容器的解決方案。透過 CI/CD 管線將建置和部署容器的程序自動化,並在生產中監視這些容器,這已逐漸成為 Kubernetes 時代的基本做法。
無伺服器運算
隨著大部分管理基礎結構的額外負荷轉移至雲端提供者,小組可以專注於其應用程式,而非基礎結構。無伺服器運算可提供不需設定和維護伺服器即可執行應用程式的能力。某些選項可降低部署與作業的複雜度和風險。
開始您的 DevOps 旅程
DevOps 有許多可行的做法和解決方案,一開始看起來會讓人不知從何下手。關鍵是從小處開始著手,並向其他人學習。
常見問題集
-
DevOps 是由組織中的不同角色實踐,且需要數個角色密切地共同作業。在大多數情況下,DevOps 角色包括開發、IT、作業、安全性與支援。
-
DevOps 並不侷限於單一角色。參與每個應用程式生命週期階段的所有人,都必須接納 DevOps 文化特性。不過,在某些組織中,部分人員或小組唯一的重點是提供自動化、定義做法及實作 CI/CD 管線。有時候,這些角色的正式職稱是 DevOps 工程師或 DevOps 專家。
-
在大型組織中採用 DevOps 可能極具挑戰性。改變大型組織的文化特性和標準化程序與工具,需要耐心和毅力。在大多數的大型組織中,都會有 DevOps 做法的早期採用者。隨著這些做法趨於成熟並產生正面結果,其他小組通常會隨之開始 DevOps 旅程。
-
DevOps 的真正意義是為客戶提供持續的價值。採用 DevOps 的結果,必須以與業務目標相關的方式來衡量。DevOps 小組需根據這些目標進行調整,並使用短期發行週期來達成這些目標。這些週期可讓小組迅速回應市場,並從客戶的意見反應持續學習。
-
DevOps 和敏捷式開發都是現代化軟體開發架構,用於生產、啟動或發行產品。DevOps 是一種文化特性,旨在促進軟體開發和維護過程中所有角色間的共同作業。敏捷式開發是一項開發方法,旨在於需求不斷變化的普遍現實情況下,保持生產力並推動發行。DevOps 和敏捷式開發並不會互相排斥,且通常會一起實踐。
-
除了持續整合外,持續傳遞與持續部署都是將軟體傳遞階段自動化的做法。