1. 程式人生 > >DevOps服務:更好地規劃、協作和快速交付

DevOps服務:更好地規劃、協作和快速交付

DevOps
是一個不斷進化的框架和哲學,不斷推動著如何更好更快的進行應用程式的開發和快速進行新機能的迭代釋出,以便快速的響應客戶需求和交付客戶產品。DevOps實踐使得開發Team和IT運維Team能夠以一種透明且可見的方式進行持續的溝通,整合,協作。

因此,這種開發團隊(Dev)和運維團隊(Ops)的緊密關係形成了DevOps生態圈。一個DevOps的生態圈包含著軟體開發規劃,程式碼實裝,測試和釋出等階段,而各個階段由開發和運維團隊緊密的跟隨和持續的監督著。這個生態環中擁有一個持續獲取客戶改善需求反饋的機制,同時持續開發、測試和部署這些反饋。如此,軟體能夠擁有持續改善並快速釋出新機能(feature)的能力。
在這裡插入圖片描述


DevOps解決方案專注四個維度方面:DevOps文化、自動化、可度量和分享((CAMS) culture, automation, measurement and sharing)。而方案的具體實施將落實到DevOps的一系列工具。通過這些工具,將開發和運維的流水線化和同步協作變得可能。這意味著你可以將開發、整合、測試和部署中的手動任務自動化。你需要的就是通過合理的DevOps方案考量來滿足這些任務。

為何DevOps變得更重要 ?

除了提高開發運維團隊間的溝通和協作外,另一個重要的原因是DevOps專注於以提供快速交付的服務或者說功能的形式來完成你的客戶的滿意度。通過DevOps是可以不斷提高生產效率,推動商業創新價值

的。
DevOps的運用能夠使得業務交付以更好、更快和更安全的方式傳遞到終端客戶。這包括機能的釋出和產品的更新。它保證瞭如何使新技能或者產品快速釋出到終端客戶而又不以損失質量的風險為代價。使得產品機能在釋出前能夠獲得充分可靠的質量保證。

不同DevOps方法論

在這裡插入圖片描述
為了更好的開發,提高產品釋出速度,有一些DevOps的方法論可以來應用。這些方法論屬於軟體開發工程的方法論體系,他們中間一些已經非常流行:

  • Scrum:Scrum是一種軟體開發方法論,它展示了團隊如何互相配合來提高開發速度,提高開發質量。該實踐包括設計角色(Scrum Master,product owner),明確功能(Sprint,Daily Scrum,TimeBox,Meeting)和關鍵工作流。
  • Kanban:軟體開發進度可以通過看板的方式來進行追蹤。
  • Agile:早期DevOps實踐和工具受Agile影響很大。Agile的一些元素在Kanban和Scrum的方法論中也有包含。以使用者故事和持續反饋的方式,Agile的實踐注重於依賴和需求變更,每日立會,需求建檔等。與長週期軟體開發方式如Waterfall形式不同,它將開發週期分佈的更短。

DevOps 工具鏈

DevOps工具鏈的建立使用是DevOps實踐的一部分。其最主要的課題是能夠縮短、流水線化和自動化軟體開發和交付流程的不同階段。一些好的DevOps方案會同時對開發和運維團隊間如何協作,如何自動化整合等作出明確的規約。
在這裡插入圖片描述
下面將介紹10款軟體開發公司推薦的DevOps工具。我們以DevOps生命週期的不同階段,來歸屬這些被使用的工具:

  • Plan: 業務價值、觀點和需求會在該階段定義。你可以通過一些工具如Git,Jira等跟蹤這些issue觀點,來計劃和管理專案。
  • Code:該階段一般是進行建立實裝軟體程式碼以及軟體設計。一般使用的工具有GitLab,GitHub,Stash或者Bitbucket。
  • Build:該階段會進行軟體編譯以及版本話的管理。為了以後釋出到生產環境,你可以使用自動化工具來編譯和打包程式碼。通過包倉庫或者程式碼倉庫管理髮布的成果物。一些使用的工具如Ansible,Docker,Maven,Chef,JFrog Artifactory或者Gradle。
  • Test:為了獲得最優的程式碼質量,該階段將進行持續測試。一些相關的工具有Codeception,JUnit,BlazeMeter,Vagrant,Selenium和TestNG等。
  • Deploy:該階段進行成果物的釋出管理,部署計劃等。使用的工具有Jira, Chef, Kubernetes, Docker, Openstack, Jenkins, OpenShift, Ansible 或者 Puppet。
  • Operate:該階段關注於將軟體部署的生產環境的過程。通常工具有PowerShell, Otter, Puppet, Salt, Ansible 或者 Chef。
  • Monitor: 這個階段將收集軟體釋出的相關問題資訊。使用的工具有 Grafana, Nagios, New Relic, Slack, Datadog 和 Wireshark。

DevOps 實踐

DevOps的實踐以持續改善和自動化為目標。大多數的實踐專注於特定的開發階段,比如:

  • 持續開發: 作為DevOps週期的一部分,該部分延展於設計計劃和程式碼實裝的階段。會有一些類似版本控制機制的活動發生。
  • 持續測試: 當應用的程式碼不斷的更新和生成的時候,該階段將會進行前期規劃,自動和持續的程式碼測試等。在生產時期,這些測試會有助於快速進行程式碼交付。
  • 持續整合: 該階段會伴隨著其他測試和開發工具的介入,以及管理工具的相關配置等。它將為準備釋出的程式碼質量進行跟蹤保證。同時,會介入其他DevOps週期包括開發和測試,快速獲得反饋同時查詢和解決程式碼中出現的問題。
  • 持續交付: 該實踐階段,負責釋出交付測試和預生產環境自動產生後的程式碼。最終負責人將決定是否將其成果物/程式碼作為產品交付。
  • 持續部署: 該階段會將新的或者更改後的程式碼自動釋出到生產環境。對於公司來講經常會一天內進行多次程式碼release或者新技能的變更提交,而自動化的持續部署就更顯得尤為重要。藉助於Kubernets和Docker等容器技術,使得自動化的持續部署能夠隨著程式碼的更新同時釋出部署到不同的平臺和部署環境上。
  • **持續監控:**該階段實踐持續監控底層基礎設施和運維問題。反饋迴圈機制負責監控和報告問題bug給開發團隊。
  • IaC(Infrastructure as code): 這個實踐會在DevOps的不同階段週期發生,從而實現自動化檢證釋出軟體所需的基礎設施要求。在現有的開發工具基礎上,開發者為基礎設施也編寫成程式碼。例如,在Kubernets,Docker和OpenShift技術工具的基礎上,儲存卷可能由開發者建立。通過IaC,可以跟蹤監控配置檔案的變更,擦除或者回滾配置。

DevOps的好處

應用DevOps能為最終實現客戶滿意帶來很多技術上,商業上的幫助和利益。列舉的常見的應用DevOps的好處有:

  • 更出色的創新
  • 更好更快的產品交付
  • 更出色的自動化工作
  • 更好的資源配置
  • 更好的可用性和擴充套件性
  • 降低複雜度,更快的解決問題
  • 更穩定的運維環境
  • 更好的視覺化的成果系統

DevOps歷史

許多的DevOps方法基於精益程式設計和敏捷開發來實現流水化的開發和運維。但是,不得不講DevOps是開發者們和運維團隊們共同一步一步積累優化出來的。

在2000年初的時候,越來越多的網站例如google和flickr面臨無法承載巨大點選量的問題。為了解決該類問題,對於運維出身而又靠譜的有研發能力的工程師的需求日益凸顯,他們來和開發團隊人員共同協作來保證能夠不斷更新發布程式碼到生產環境,同時保證網站能夠穩定執行。

2009年,在一次技術峰會中Flickr的工程師Paul Hammond和John Allspaw發表了類似現在DevOps的方法論。同年,Patrick Debois在Belgium組織舉辦了第一次的【DevOps Day】。隨著越來越多的該活動在全世界各地的舉辦和推廣,新的標籤 #DevOps正式產生。

為了更好的滿足DevOps的目標,隨後幾年越來越多的開源工具和框架被提出和開發出來。

DevOps解決的問題

在提出DevOps服務前,開發團隊需要理解業務,收集需求並最終進行程式碼實裝,之後,軟體的測試由QA團隊單獨在獨立的環境中測試軟體是否正常工作,然後再交給運維成員去部署。而運維團隊又分成子團隊,如負責資料庫的,負責網路的等等。這種模式產生了如下問題:

  • 運維和QA團隊將會對非常多的機能進行相應工作,然而他們可能對其機能的上下文或者業務目的一無所知。
  • 而開發團隊呢,他們對運維和QA團隊碰到和提出的問題一臉蒙圈,如此導致軟體不能按照預期的進行開發交付上線等。
  • 各個團隊的獨立工作,使得在軟體出現問題的時候,互相指責,如此使得各個團隊工作效率下降。

面臨此類問題,DevOps的應用完全是雪中送碳。應用DevOps方案,你可以解決不同團隊協作的問題,問題事件不詳細等等問題。通過這種方式,使得責任共擔,從而保證軟體的預期執行和交付。同時,自動化的問題跟蹤和質量反饋收集不僅降低了時間成本,更提高了生產效率和客戶滿意度。

DevOps的目標

DevOps主要專注於提高改善不同利益體間的協作,從計劃到實施交付所有一切都是自動化的流程。它的目標是:

  • 增加部署的頻度
  • 減少新發布的失敗率
  • 縮短上市時間
  • 減少bug修正時間
  • 更好的進行修復維護

根據最新(2016)的DevOps狀態統計報告,“應用DevOps的公司的部署頻度增加了30倍,而部署時間縮短了200倍;同時他們的失敗率降低了60倍,而恢復速度提高了168倍。”