什麼是 DevOps?

了解 DevOps 如何統一人員、流程與技術,以更快速為客戶帶來更好的產品

DevOps 定義

DevOps 是開發 (Dev) 和作業 (Ops) 的複合,是人員、程序與技術的聯合,可持續不斷為客戶提供價值。

DevOps 對團隊代表了什麼意義?DevOps 能讓先前各自獨立的角色 (開發、IT 作業、品質工程和安全性) 互相協調並共同作業,以生產更好、更可靠的產品。藉由採用 DevOps 文化特性和 DevOps 做法及工具,團隊能更妥善回應客戶需求、對其建置的應用程式更具信心,並更快速達成業務目標。

DevOps 的優勢

採用 DevOps 文化特性、做法和工具的團隊可獲得更高的效能,也能更快速建置更好的產品以提高客戶滿意度。這種改進的共同作業和生產力,也是達成下列業務目標所必需:

縮短上市時間

適應市場與競爭

保持系統穩定性和可靠性

改進平均復原時間

DevOps 和應用程式生命週期

DevOps 會從整個規劃、開發、傳遞和作業階段影響應用程式生命週期。每個階段都依賴於其他階段,且階段並不特定於角色。在真正的 DevOps 文化中,在某種程度上,每個角色都會參與每個階段。

方案

在規劃階段中,DevOps 團隊會構思、定義並描述他們正在建置之應用程式和系統的功能。他們會以高低不同的細微性層級來追蹤進度,從單一產品工作到跨多個產品組合的工作。建立代辦項目、追蹤 Bug、使用 Scrum 管理敏捷式軟體開發 (Agile Software Development)、使用工作流程看板、利用儀表板將進度視覺化,是DevOps 團隊規劃敏捷性和可見性的一些方法。

開發

開發階段包括編碼 (編寫、測試、檢閱以及團隊成員對程式碼整合的所有方面),以及將程式碼建置於可以部署至各種環境的組建成品中。DevOps 團隊會在不犧牲品質、穩定性和生產力的情況下尋求快速創新。為了達成此目標,他們使用高生產力工具來將一般步驟與手動步驟自動化,並透過自動化測試與持續整合以小增量的方式進行逐一查看。

傳遞

傳遞是以一致且可靠的方式,將應用程式部署至生產環境的程序。傳遞階段也包括部署及設定組成這些環境的完全受控基礎結構。

在傳遞階段中,團隊會透過明確的手動核准階段來定義發行管理程序。並且會設定自動化閘道,閘道會在各階段之間移動應用程式,直到應用程式可供客戶使用為止。將這些程序自動化,可讓其變得易於調整、重複和控制。如此一來,實踐 DevOps 的團隊便可以輕鬆、有信心並安心地頻繁傳遞。

操作

作業階段包含在生產環境中維護及監視應用程式,並進行疑難排解。採用 DevOps 做法時,團隊會致力於確保系統的可靠性與高可用性,並確保零停機時間,同時加強安全性和管理。DevOps 團隊會在問題影響客戶體驗之前發現問題,並在問題發生時迅速予以解決。保持這種警覺需要豐富的遙測、可操作的警示,以及對應用程式和基礎系統的完全可見性。

DevOps 文化特性

儘管採用 DevOps 做法可以透過技術來將程序自動化及最佳化,但這一切都始於組織內部的文化特性,以及參與其中的人員。為了克服培養 DevOps 文化特性的挑戰,人員必須在工作與共同作業的方式上做出重大改變。但是,一旦組織致力於 DevOps 文化特性,就能打造可供高效團隊進行開發的環境。

共同作業、可見度和對齊

良好 DevOps 文化特性的其中一項特徵,即為團隊之間的共同作業,從可見度開始。開發和 IT 作業等不同團隊必須彼此共用其 DevOps 程序、優先順序和考量。這些團隊也必須一起規劃工作,並將與業務相關的目標和成功衡量標準保持一致。

範圍與責任的轉移

隨著團隊之間的協調,他們可獲得主導權並參與其他生命週期階段,而不僅限於其角色主要負責的階段。例如,開發人員不僅要對開發階段建立的創新和品質負責,也要對因其改變而在作業階段所帶來的效能及穩定性負責。同時,IT 操作員必然會在規劃與開發階段納入治理、安全性與合規性。

較短的發行週期

DevOps 團隊以短週期發行軟體以保持靈活。較短的發行週期能讓規劃與風險管理更輕鬆,因為進度是遞增的,這也會降低對系統穩定性的影響。縮短發行週期,也能讓組織適應並應對持續變化的客戶需求與競爭壓力。

持續學習

高效 DevOps 團隊會建立成長心態。他們會快速從失敗中學習,並將經驗融入程序中,且會不斷改進、提高客戶滿意度並加速創新及適應市場。DevOps 是一個旅程,因此始終有成長的空間。

了解 Microsoft 整個團隊如何採用 DevOps 文化

深入了解

DevOps 做法

除了建立 DevOps 文化特性之外,團隊也可以在整個應用程式生命週期中實作某些做法來實現 DevOps。其中某些做法有助於加速、自動化並改進特定階段。其他做法則涉及多個階段,可協助團隊建立順暢的程序,並提升生產力。

持續整合與持續傳遞 (CI/CD)

持續整合是一種軟體開發做法,開發人員會在其中將程式碼變更頻繁合併至主要程式碼分支。持續整合採用自動化測試,會在每次認可新程式碼時執行,以便主要分支中的程式碼保持穩定。

持續傳遞是頻繁地將新應用程式版本自動部署至生產環境。透過自動執行部署所需的步驟,團隊可減少部署時可能發生的問題,並提供更頻繁的更新。

當兩種做法都實現時,產生的程序就是 CI/CD,其中包括將程式碼認可至生產部署之間的所有步驟都完全自動化。實作 CI/CD 可讓團隊專注於建置程式碼,並在手動及一般步驟中移除額外負荷和潛在的人為錯誤。CI/CD 也能讓部署新程式碼的程序更快、風險更低。接著,會更頻繁地以較小的增量來進行部署,進而協助團隊變得更靈活、更具生產力,並更有信心執行程式碼。

版本控制

版本控制是在版本中管理程式碼的做法,可追蹤修訂與變更歷程記錄,讓程式碼易於檢閱及復原。此做法通常使用如 Git 的版本控制系統來實作,可允許多名開發人員在創作程式碼時進行共同作業。這些系統提供清楚的程序,來合併在相同檔案中發生的程式碼變更、處理衝突並將變更復原至較早的狀態。

使用版本控制是 DevOps 的一項基本做法,可協助開發團隊共同作業、在團隊成員之間劃分編碼工作,並儲存所有程式碼以便在需要時輕鬆復原。

版本控制也是其他做法中的必要元素,例如持續整合與基礎結構即程式碼。

深入了解 Git

敏捷式軟體開發 (Agile Software Development)

敏捷式開發是一種軟體開發方法,強調團隊共同作業、客戶和使用者意見反應,以及透過短期發行週期對變更的高適應性。實踐敏捷式開發的團隊,可為客戶提供持續的變更與改進,並收集客戶意見反應,再根據客戶需求來學習與調整。敏捷式開發與其他較傳統的架構 (例如瀑布方法) 有很大不同,後者包括由循序階段所定義的長期發行週期。工作流程看板和 Scrum 是與敏捷式開發相關聯的兩種熱門架構。

了解敏捷式開發與 DevOps 如何搭配運作

基礎結構即程式碼

基礎結構即程式碼以描述性方式定義系統資源和拓撲,可讓團隊如同編碼一樣管理這些資源。這些定義也可以儲存於版本控制系統中並建立版本,並且可在其中像程式碼一樣檢閱及還原。

實踐基礎結構即程式碼,可協助團隊以可靠、可重複與受控的方式來部署系統資源。基礎結構即程式碼也有助於自動執行部署並降低人為錯誤的風險,特別是針對複雜的大型環境。這種可重複、可靠的環境部署解決方案,可讓團隊維護與生產環境相同的開發與測試環境。將環境複製到不同的資料中心和雲端平台,也同樣變得更簡單且更有效率。

設定管理

設定管理是指管理包含伺服器、虛擬機器和資料庫等系統中的資源狀態。使用設定管理工具可讓團隊以受控的系統化方式推出變更,降低修改系統設定的風險。團隊會使用設定管理工具來追蹤系統狀態並協助避免設定偏差,此偏差是因系統資源設定隨著時間而偏離為其定義的所需狀態所造成。

與基礎結構即程式碼同時實踐,系統定義和設定都可輕鬆進行範本化和自動化,從而協助團隊大規模操作複雜的環境。

持續監視

持續監視表示從執行應用程式之基礎結構到更高層級的軟體元件,全面且即時地了解整個應用程式堆疊的效能和健康狀態。此可見度包括遙測和中繼資料的集合,以及預先定義條件的警示設定,這些條件皆需操作員注意。遙測由從系統各個部分收集的事件資料與記錄所組成,這些資料與記錄儲存於可進行分析和查詢的地方。

高效能的 DevOps 團隊會確保其設定可操作、有意義的警示,並收集豐富的遙測,以便從大量資料中獲得見解。這些見解有助於團隊即時解決問題,並了解如何在未來開發週期中改進應用程式。

DevOps 工具

團隊擁有許多 DevOps 工具來協助他們在組織中促進 DevOps 文化。大多數團隊依賴於多種工具,並建置自訂工具鏈以滿足應用程式生命週期中每個階段的需求。雖然採用特定工具或技術與採用 DevOps 並不相同,但是當 DevOps 文化已存在並已定義程序時,只要人員選擇適當的工具,即可以實作並簡化 DevOps 做法。取得可將 DevOps 付諸實行的工具:

DevOps 和雲端

採用雲端可從根本上改變團隊建置、部署及操作應用程式的方式。同時採用 DevOps,可讓團隊擁有更多機會來改進其做法,並為客戶提供更佳的服務。

雲端彈性

藉由以無限量資源快速佈建及設定多區域雲端環境的能力,團隊可靈活地部署應用程式。現在,團隊不必購買、設定及維護實體伺服器,在幾分鐘內即可建立複雜的雲端環境,然後在不需要時將其關閉。

Kubernetes

隨著愈來愈多的應用程式使用容器技術,Kubernetes 逐漸成為業界用於大規模協調容器的解決方案。透過 CI/CD 管線將建置及部署容器的程序自動化,並在生產中監視這些容器,已逐漸成為 Kubernetes 時代的基本做法。

無伺服器運算

隨著大部分管理基礎結構的額外負荷轉移至雲端提供者,團隊可以專注於其應用程式,而無需專注於基礎結構。無伺服器運算可提供不需設定及維護伺服器即可執行應用程式的能力。某些選項可降低部署與作業的複雜度和風險。

開始您的 DevOps 旅程

DevOps 有許多可行的做法和解決方案,一開始看起來會讓人不知從何下手。關鍵是從小處開始著手,並向別人學習。

常見問題集

  • DevOps 由組織中的不同角色實踐,且需要數個角色密切地共同作業。在大多數情況下,DevOps 角色包括開發、IT、作業、安全性與支援。

    了解如何建立 DevOps 實務

  • DevOps 並不侷限於單一角色。參與每個應用程式生命週期階段的每位人員,都必須接納 DevOps 文化特性。不過,在某些組織中,某些人員或團隊唯一的重點是提供自動化、定義做法及實作 CI/CD 管線。有時候,這些角色的正式職稱是 DevOps 工程師或 DevOps 專家。
  • 在大型組織中採用 DevOps 可能極具挑戰性。改變大型組織的文化特性和標準化程序與工具,需要耐心和毅力。在大多數的大型組織中,都會有 DevOps 做法的早期採用者。隨著這些做法趨於成熟並產生正面結果,其他團隊通常會隨之開始接納 DevOps。

    了解 Microsoft 整個團隊如何採用 DevOps 文化

  • DevOps 的真正意義是為客戶提供持續的價值。採用 DevOps 的結果,必須以與商務目標相關的方式來衡量。DevOps 團隊需根據這些目標進行調整,並使用短期發行週期來達成這些目標。這些週期可讓團隊迅速回應市場,並從客戶的意見反應持續學習。
  • DevOps 和敏捷式開發都是現代軟體開發架構,用於生產、啟動或發行產品。DevOps 是一種文化特性,旨在促進軟體開發和維護過程中所有角色間的共同作業。敏捷式開發是一項開發方法,旨在於需求不斷變化的普遍現實情況下,保持生產力和加速發行。DevOps 和敏捷式開發並不會互相排斥,且通常一起實踐。

    了解如何結合 DevOps 與敏捷式開發

  • 除了持續整合外,持續傳遞及持續部署都是將軟體傳遞階段自動化的做法。