fbpx

HashiCorp – DevOps 的 7 個階段與專屬工具:加速應用程式的交付週期

DevOps 的難題

每間公司有自己對 Devops 的定義與理解,不變的精髓是盡可能減少交付 (shipping)、快速迭代 ( iterating) 和確保軟體及應用程式的安全性 (securing)。

HashiCorp 將 DevOps 定義為一個組織流程,它必須結合現代應用程式的需求,賦權每個人員來提高敏捷性。

轉往雲端的營運團隊的挑戰:接納不同雲端供應商的異質性的同時,還要透過基礎設施即代碼來實現自動化

DevOps 涉及負責交付應用程式的主要人員,包括開發人員、營運人員和安全專家,這三個相互依存的角色需要緊密耦合的工具來協調對應用程式交付的投入。

DevOps 是一種從瀑布式軟體開發中跳脫出來的概念,在瀑布開發中,軟體應用程式是通過不同小組以線性、分步的方式交付的。開發人員接收需求並編寫應用程式,然後交給品質保證工程師 (QA) 進行測試。在開發階段之後,應用程式被交給發布團隊進行打包和用戶接受測試。測試完成後,安全專家會進入以確保合規性和最佳實踐。最終,操作人員部署應用程式,而瀑布的最後階段落在監控團隊上。

傳統的瀑布式軟體交付的問題在於,它優先考慮風險的最小化,而不是敏捷性的最大化。瀑布開發限制了個人自主權,減緩了回饋循環,並且每個小小的應用程式修改都需要許多團隊投入和檢查點。

DevOps 就是讓參與開發流程的各方人馬—營運、安全、開發—可以並行作業。HashiCorp 將應用程式交付流程的關鍵階段拆解,為每個參與者和任務提供最合適的工具,因此我們奉行優先考慮敏捷性、價值交付時間和迅速迭代的軟體更新流程。

DevOps 的興起也與混合雲基礎架構的崛起有關,混合雲基礎架構由分布式服務和數據中心組成。現代應用程式都是連網的精簡型用戶端 (thin clients) ,例如瀏覽器和行動應用程式,因此更新可以快速交付,通常也不需要嚴格的風險管理的「召回 (recall)」。

一致的開發方法得以容納應用程式的異質性

一致的開發方法得以容納應用程式的異質性

DevOps 落實得當的話可以最大化軟體交付的速度。透過全局性地看待整個交付過程,我們可以消除傳統開發流程上某個角色可能會超載的瓶頸;畢竟,水桶能裝多少水是由最短的木板決定的,軟體的交付速度也是取決於最慢的開發小組。

軟體交付的 7 個階段

每個組織的軟體交付流程都有略微不同的要素,這些要素會受到技術選擇、合規要求或其他因素的影響,但大致上軟體交付週期有 7 個階段:

1. 建置 (Build)

應用程式始於開發人員編寫程式碼,新的應用程式就必須編寫初始版本;但對於已經存在的應用程式,開發週期似乎永無止境 – 新增新功能、提高可用性、修正錯誤、改善效能…等。建置階段主要由開發人員負責,但營運團隊可能需要負責提供開發人員用於編寫程式碼的環境和工具。

2. 測試 (Test)

在應用程式被編寫和發佈之前,它會經歷多種測試。最簡單的測試,即單元測試,由開發人員完成,並且可以與整合測試、驗收測試、端到端測試等進行分層。這是應用程式交付週期中的重要環節,因為它提供了自動化回饋和重要的風險管理控制。這個階段主要由開發人員負責,但也包括專門的品質保證團隊和營運團隊,他們可能負責測試用的環境。

3. 打包 (Package)

打包:一旦應用程式被編寫和測試,就需要將其打包以投入正式使用。基礎應用程式會從原始碼形式打包成可執行的文件。打包階段可能會重度依賴技術或正式上線的環境。例如,JBoss 的 WAR 文件或 Kubernetes 的 Docker 容器。在某些情況下,這些打包檔可能會儲存在 Artifactory 或 Sonatype Nexus 等工件儲存庫中。

4. 配置 (Provision)

應用程式需要有地方運行,在所有抽象層之下,仍然需要提供計算、儲存和網路資源。這些資源可以直接以實體機或虛擬機 (VM) 提供,也可以間接地通過基礎設施即服務 (IaaS) 提供。在任何情況下,這些資源都需要按照應用程式規格進行準備和配置,並在使用壽命結束時進行更新和最後的停用。配置階段通常由營運團隊負責,並作為一項服務提供給開發人員。

5. 安全性 (Secure)

系統的整體安全性取決於最弱的那塊,這意味著安全性應該從應用程式交付流程的一開始就被納入考慮。安全團隊在開發期間確保使用最佳實踐,協助建模網路拓撲,保護用於部署基礎設施的憑證,並授予部署應用程式所需的密碼,例如資料庫密碼和 API 令牌。安全性通常由專職的角色負責,但也包括所有其他參與應用程式交付的團隊。

6. 部署 (Deploy)

在基礎資源配置好之後,部署階段就是將打包好的應用程式運行起來。如果機器或 VM 被專門用來運行單個應用程式,那麼配置階段就會與部署階段緊密耦合;如果使用調度器 (scheduler) 動態地將應用程式部署到機器上,那麼配置階段就會與部署階段解耦。

7. 監控 (Monitor)

運行中的應用程式需要被監控,以確保它們持續以健康的性能運行。服務需要相互聯繫,同時避免與故障或性能不佳的實例通訊,這也導致服務發現的必要性。監控階段涵蓋了從粗粒度的服務生存狀態測量到詳細的日誌記錄和遙測等,監控階段涉及的人員包含想要了解應用程式行為的開發人員、管理基礎設施的營運人員以及維護整體應用程式的監控人員和 SRE (site reliability engineers)。

DevOps 交付,為任何應用程式配置、防護和運行於任何基礎架構

設計高效能的組織就像設計高效能應用程式一樣:應該要盡可能減少協商 ( coordination),不論是組織或是應用程式都遵循 Amdahl 定律,如果我們將每個人都視為「執行單位」,那麼整體的生產力也會被協商程度限制。

上述交付應用程式的七個階段是不能跳過的,因此重點是如何最大程度地減少每個階段所需的協商程度。如果每個團隊都被授權獨立工作,就可以減少協商並提高每個人的生產力,應用程式交付速度也會因此提升。

這是 DevOps 的核心理念,我們選擇的工具必須優先考慮這些關鍵功能。為了維持一致的開發流程,這些工具必須專注於工作流程,而不是技術,以解決大多數組織面臨的技術異質性。

HashiCorp 提供一套以 DevOps 為中心的工具,專注於減少應用程式交付週期各個階段的人工協商。

HashiCorp Vagrant

HashiCorp Vagrant

Vagrant 允許開發人員自己快速建立開發環境,而無需諮詢同事或營運人員。它還提供了一個類似正式環境的環境,使開發人員可以輕鬆更快地取得代碼測試回饋,這也是持續整合 (CI) 的目標之一,因為它允許開發人員藉由更快地提供回饋來提高個人生產力。(更多原廠介紹)

HashiCorp Packer

HashiCorp Packer

Packer 為任何目標環境提供單一工作流程來打包應用程式。透過共享配置,Packer 允許團隊解耦並降低協商。協調被推到工件儲存庫中,例如 Artifactory 或 Docker Hub,因此開發人員無需擔心部署的細節。(更多原廠介紹)

HashiCorp Terraform

HashiCorp Terraform

Terraform 是一種使用通用工作流程,在任何基礎架構中提供基礎架構和應用程式資源的產品。Terraform 使操作員能夠安全、可預測地創建、更改和改進正式環境的基礎架構。它將 API 編碼為可在團隊成員之間共享、被視為代碼、編輯、審查和版本化的宣告性配置文件 (declarative configuration files)。(Terraform 中文介紹)

HashiCorp Vault

HashiCorp Vault

Vault 在應用程式交付週期的每個階段提供集中式密鑰管理方法。它使用高度可用和安全的方法儲存和揭露密鑰給應用程式和最終用戶。Vault 允許團隊直接取得需要的數據,而不用等待安全團隊的批准。安全團隊可以更改密碼、輪換憑證和更新安全策略,免去在組織內部協商的流程。( Vault 中文介紹)

HashiCorp Nomad

HashiCorp Nomad

Nomad 是集群管理器和調度器。調度器允許組織將關注的項目進一步解耦,並完全將機器抽象化給開發人員。取而代之的是,開發人員專注於他們想要運行的應用程式,並允許調度程序將應用程式放置在基礎架構上並管理機器的容量。Nomad 允許操作員提供機器群,與提交作業給 Nomad 的開發人員解耦。Nomad 將應用程式放置在可用機器上,操作員和開發人員免去協商與手動調整。(更多原廠介紹)

HashiCorp Consul

HashiCorp Consul

Consul 是 HashiCorp 的服務發現和監控工具,它也是服務網格的數據平台組件。Consul 允許運行的應用程式廣播其可用性並與其他應用程式通信。例如,Web 服務器可以使用 Consul 找到其上游資料庫或 API 服務。Consul 還監控應用程式的健康狀況,以確保只有健康的實例接收流量,並通知開發人員或操作員問題。這允許開發團隊避免在 IP 位址上協商,並在應用程式的運行時推入服務發現,因此服務可以獨立更新。通過由各個團隊並行更新獨立服務,提高了生產力,而不用像單一代碼庫所需的那種協作方式,Consul 解決了微服務和面向服務的架構相關的許多挑戰。(更多原廠介紹)

做對 DevOps ,讓營運、安全和開發團隊並行工作

隨著每個公司都成為軟體公司,執行 DevOps 的能力使他們能夠更快地交付更好的應用程式,全球數十萬專業軟體人員都使用 HashiCorp DevOps 套件來實現這一點。

透過專為 DevOps 的每個階段設計的工具,HashiCorp 讓軟體開發流程的不同參與者(開發、營運和安全團隊)專注於他們的主要任務,解除他們並行工作的阻礙,這意味著將瀑布式開發流程轉變為三個團隊可以並行運行的開發流程。

Devops  並行運行的開發流程

本文翻譯自原廠文章:DevOps Defined – Accelerating the Application Delivery Lifecycle

相關文章