ChienI Kao
筆記網站
JHTNT
筆記網站
# What is DevOps?
DevOps 拆開來就是 Development + Operations ,也就是開發與維運。
更準確的說可以是「開發」「測試」「維運」三者的結合,是一種軟體開發和部署的方法論。
DevOps 主要促進開發和 IT 運營兩個團隊的結合與運作,提升團隊之間的協作和溝通。
DevOps 的目的是通過協調和自動化開發、測試和部署來實現更快的產品交付速度、更高的品質及提升工作效率。
生命週期的每個階段:從初始軟體規劃到程式碼、建構、測試和發佈階段,再到部署、作業與持續監控。
這種關係推動了進一步改善、開發、測試及部署的持續客戶回饋循環。可能可以更快速地持續發佈必要的功能變更或新增項目。
# DevOps 核心五個概念 - CALMS
- Culture 文化:
DevOps 不是一個工具而是代表一個 IT 文化轉型的概念,藉由同理心與換位思考讓開發與營運人員合作更加順暢。 - Automation 自動化:
自動化流程提高效率,有助於建立敏捷的團隊,產出品質優良的產品。 - Lean 精實:
DevOps 希望能建立敏捷開發的團隊,因此精實生產過程也非常重要,包含了減少浪費、盡快交付、延遲做決定等原則,延遲做決定是指領導者可以等接收到完整的資訊後再做決策。 - Measurement 測量:
利用數據判斷決策是否正確,若數字一旦有所異常即可隨時改變策略,使團隊保持敏捷性。 - Sharing 分享:
藉由團隊間共享資訊,可以提升解決問題的效率。
# 生命週期
- 持續開發:這項實務做法涵蓋了 DevOps 開發維運生命週期的規劃與編碼階段。其中可能涉及版本控制機制。
- 持續測試:這項實務做法可以在正在編寫或更新應用程式的程式碼時納入預先排定的持續自動化程式碼測試。這類測試可以加快將程式碼交付至正式作業的速度。
- 持續整合 (CI):這項實務做法可以將組態管理 (CM) 工具和其他測試與開發工具結合,以追蹤正在開發的程式碼有多少已準備就緒可供正式作業使用。其中涉及在測試與開發之間快速提供意見反應,以便迅速識別並解決程式碼問題。
- 持續交付:這項實務做法可以在測試後,自動將程式碼變更傳送至正式作業前或接移環境。然後,員工可以決定是否要將這類程式碼變更推廣至正式作業環境。
- 持續部署 (CD):與持續交付類似,這項實務做法可以自動將新程式碼或變更後的程式碼發佈至正式作業環境。執行持續部署的公司每天可以發佈數次程式碼或功能變更。使用 Docker 和 Kubernetes 等 Container 技術有助於在不同的部署平台和環境中維持程式碼的一致性,進而實現持續部署。
- 持續監控:這項實務做法包括持續監控運作中的程式碼以及支援該程式碼的底層基礎架構。回報錯誤或問題的回饋循環隨後又會回到開發階段。
- 基礎架構即程式碼:這項實務做法可在各種 DevOps 開發維運階段中使用,以自動化軟體版本所需的基礎架構資源配置。開發人員可從其現有的開發工具中新增基礎架構「程式碼」。例如,開發人員可以視需求從 Docker、Kubernetes 或 OpenShift 建立儲存 Volume。這項實務做法也可讓營運團隊監控環境組態、追蹤變更,並簡化組態的復原作業。
# 工具
- 規劃:此階段有助於定義商業價值與需求。範例工具包括 Jira 或 Git,可協助追蹤已知問題並執行專案管理。
- 程式碼:此階段涉及軟體設計及軟體程式碼的建立。範例工具包括 GitHub、GitLab、BitBucket 或 Stash。
- 建置:在此階段,您將管理軟體建置與版本,並使用自動化工具來協助編譯及封裝程式碼,以供將來發佈到正式作業環境。您使用的原始碼程式碼儲存庫或套件儲存庫也會「封裝」產品發佈所需的基礎架構。範例工具包括 Docker、Ansible、Puppet、Chef、Gradle、Maven 或 JFrog Artifactory。
- 測試:此階段包括持續測試(手動或自動),以確保最佳的程式碼品質。範例工具包括 JUnit、Codeception、Selenium、Vagrant、TestNG 或 BlazeMeter。
- 部署:此階段可以包含有助於管理、協調、排程和自動將產品發佈至正式作業環境的工具。範例工具包括 Puppet、Chef、Ansible、Jenkins、Kubernetes、OpenShift、OpenStack、Docker 或 Jira。
- 操作:此階段可在正式作業期間管理軟體。範例工具包括 Ansible、Puppet、PowerShell、Chef、Salt 或 Otter。
- 監督:此階段包括識別及收集有關正式作業中特定軟體版本問題的資訊。範例工具包括 New Relic、Datadog、Grafana、Wireshark、Splunk、Nagios 或 Slack。
# 優勢
- 更快、更好地交付產品
- 更快地解決問題並降低複雜度
- 更高的擴充性與可用度
- 更穩定的作業環境
- 更佳的資源使用率
- 更優異的自動化功能
- 更清楚地掌握系統成果
- 更高程度的創新