在大多數狀況下,軟件應用程序開發因爲其規範性和複雜性而變得很耗時。 爲了在短期內交付高質量應用程序,軟件開發人員正在遵循一套通用的實踐,稱爲DevOps生命週期。ios
那麼,DevOps在軟件應用程序開發領域中扮演着什麼角色? 讓咱們深刻了解其含義、用途以及DevOps生命週期中的每一個關鍵階段。編程
在DevOps以前,從業人員使用瀑布模型或敏捷開發模型進行軟件項目開發:瀑布模型或順序模型是軟件開發生命週期(SDLC)中的一種開創性方法,在這個模型中,軟件開發成爲一個線性過程,不一樣的階段和任務被依次定位;而敏捷開發涉及各類方法的使用和SDLC中多個團隊的協做。瀑布模型的線性和敏捷開發的跨功能性沒法確保快速、連續地交付完好陷的軟件應用程序。安全
軟件行業日益清晰地認識到:爲了按時交付軟件產品和服務,開發和運維工做必須緊密合做。這樣的狀況下,DevOps應運而生。服務器
DevOps是一個簡單的縮寫詞,源於「development(開發)」和「Operation(運維)」兩個詞,它涉及以特定的方式實踐應用程序開發的任務。更普遍地說,軟件開發和IT運維的結合被稱爲DevOps。網絡
DevOps在促進IT運維和軟件開發之間的敏捷關係方面的有效性受到幾個因素的支持。經過在軟件開發和IT運維部門的多個業務部門內實現更好的通訊,DevOps經過如下優點的結合改進了軟件的整體生產:穩定的運行環境、超快速的交付、堅實的合做、時間優化(特別是在修復/維護階段)、持續創新。這樣的技術優點使得DevOps成爲世界上軟件應用程序開發中備受追捧的方法。框架
要了解DevOps如何實現這些優點,瞭解DevOps的完整生命週期是很重要的。讓咱們分解DevOps中的關鍵階段,並找出實現完美、連續和快速軟件開發的過程。運維
DevOps主要用於電子商務網站、雲本地應用程序和其餘大型分佈式平臺的應用程序開發。它由多個階段組成,這些階段統稱爲DevOps生命週期:持續開發、持續集成、持續測試、持續反饋、持續監測、持續部署、持續運維。 編程語言
這七個階段是能確保DevOps優化從提出到生產再到完整交付的整個開發流程的主要組成部分。 下面是對DevOps生命週期的階段性、完整的分解和分析。分佈式
DevOps生命週期的第一個階段是規劃和軟件編碼。其中規劃包括理解項目的遠景,並基於這些遠景設想軟件。作規劃不涉及任何主要工具,而維護代碼須要使用一系列工具。 開發應用程序源代碼的第一步是從不一樣的編程語言中進行選擇。 JavaScript,C / C ++,Ruby和Python在DevOps中主要用於編碼應用程序。工具
維護代碼的過程稱爲源代碼管理(SCM),其中使用了諸如Git、TFS、GitLab、Subversion等版本控制工具。
在SCM過程當中,Git是支持分佈式版本控制的首選工具。它經過循環的非線性工做流對數據保證作出貢獻。對於涉及大量合做者參與開發活動的大型項目,Git經過提交消息在團隊之間創建可靠的通訊。
藉助版本控制工具,能夠在連續開發階段構建應用程序代碼的穩定版本。 開發人員還可使用Garden,Maven和相似工具將代碼打包爲.exe(可執行)文件。
源代碼會被修改屢次,這些頻繁的更改每週甚至天天都在發生着。 下一階段的代碼集成是整個DevOps生命週期的核心。 在持續集成中,將構建支持附加功能的新代碼,並將其集成到現有代碼中。
在這個階段,源代碼中的錯誤會在早期就被檢測到。爲了生成爲應用程序帶來更多功能的新代碼,開發人員運行用於單元測試、代碼評審、集成測試、編譯和打包的工具。 將新代碼持續集成到現有源代碼中有助於反映最終用戶在使用更新後的代碼時所經歷的更改。
Jenkins是被普遍應用的可靠的DevOps工具,用於獲取更新的源代碼並將構建構建爲.exe格式。 這些轉換是無縫進行的,更新的代碼將打包並進入下一階段,即生產服務器或測試服務器。
一些開發人員在持續集成階段以前執行持續測試階段。根據應用程序代碼中的更新,能夠圍繞DevOps生命週期中的持續集成階段從新定位此階段。
在這個階段,對開發的軟件進行不斷的Bug測試。 使用Docker容器來模擬測試環境。 經過自動化測試,開發人員能夠節省往常在手動測試中浪費的精力和時間。 自動化測試生成的報告可改善測試評估過程,分析失敗的測試用例變得更加容易。 通過UAT(用戶接受測試)過程後,生成的測試套件更簡單且沒有Bug。
TestNG,Selenium和JUnit是用於自動化測試的一些DevOps工具。 這些工具還能夠在預設的時間線上安排測試用例的執行。質量保證工程師(QA)可使用這些工具對其餘幾個代碼庫進行並行測試。它確保了應用程序實現功能完美和網絡互聯。最後,被測試的代碼被從新發送到持續集成階段以更新源代碼。
持續測試和持續集成是確保應用程序代碼持續改進的兩個關鍵階段,而持續反饋是分析這些改進的階段。
開發人員能夠在最終產品上評估這些修改的結果。 最重要的是,測試這些應用程序的客戶能夠在此階段分享他們的經驗。 在大多數狀況下,DevOps生命週期的這一階段爲應用程序開發過程提供了一個轉折點。 及時評估反饋,開發人員開始着手進行新更改。 這樣,客戶反饋很快就能獲得積極的迴應,這爲發佈軟件應用程序的新版本鋪平了道路。
監測應用程序的性能對於應用程序開發人員相當重要。 在此階段,開發人員記錄有關應用程序使用的數據,並持續監測着每一個功能。 「服務器沒法訪問」或「內存不足」是能夠在這個階段被解決的一些常見系統錯誤。
持續監測有助於保持應用程序中服務的可用性。它還能確認重複出現的系統錯誤的威脅和根本緣由。在這個階段,安全問題能夠獲得解決,還能自動檢測和修復缺陷。
與軟件開發團隊相比,IT運維團隊在這一階段的參與程度更高。他們的角色在監視用戶活動、檢查系統是否有異常行爲以及跟蹤錯誤的存在方面相當重要。
Sensu,ELK Stack,NewRelic,Splunk和Nagios是用於持續監視的關鍵DevOps工具。 這些工具可實現對系統、生產服務器和應用程序性能的全面控制。 在這些工具的幫助下,運維團隊能夠積極參與,以提升應用程序的可靠性和生產率。
當在此階段檢測到重大問題時,應用程序將在DevOps生命週期的全部早期階段快速從新運行,這就是爲什麼在這個階段找到解決各類問題的方法會變得更快的緣由。
一般來講,持續部署階段發生在持續監視以前。可是,開發人員要確保這個階段在DevOps生命週期中始終處於活動狀態,尤爲是在應用程序上線並開始接收大量流量以後。
在此階段,最終肯定的應用程序代碼將被部署到生產服務器。配置管理是這一階段的關鍵過程,它在全部服務器上執行應用程序代碼的精確部署,創建並管理應用程序性能和功能條件的一致性。將代碼發佈到服務器,爲全部服務器安排更新,而且這些配置在整個生產過程當中保持一致。
Ansible、Puppet和Chef是用於配置管理的一些有效的DevOps工具,它們常常執行新代碼的快速和連續部署。
容器化工具用於經過配置管理過程實現連續部署。 Vagrant是一種容器化工具,可在從開發和測試到階段和生產的不一樣環境中發展一致性。 一樣,連續部署的可伸縮性由Docker等工具處理。這些工具經過複製和打包來自測試,登臺和開發階段的軟件耦合,消除了各類生產故障和系統錯誤。 最終,該應用程序能夠在不一樣的計算機上流暢運行。
DevOps生命週期的最後一個階段是最短且最簡單的階段。 持續運維的目的是使發佈的應用程序和後續更新的過程自動化。 持續運維中的開發週期更短,從而使開發人員可以不斷加快該應用程序的上市時間。
DevOps生命週期的每個階段都由兩個共同因素控制:最大程度的自動化和連續性。多功能工具取代了額外的步驟,大大縮短了檢測故障所需的時間。DevOps運行在一個生命週期中,這個生命週期提供了軟件應用程序的最佳版本。
憑藉其獨立的開發環境和更快的開發方法,DevOps成爲技術市場的重要貢獻者。 它是經過建立動態應用程序來解決技術業務挑戰的最重要的工具集。因爲這種方法給開發人員和用戶都能帶來好處,DevOps的採用率持續增長。國內大廠如阿里、騰訊、華爲、等都有本身的雲端DevOps解決方案。
以開源和私有部署爲主要特色的禪道項目管理軟件也已經內置了對Git、Subversion、Jenkins的集成,同時還提供了zentao ztf的自動化測試框架,打通了項目管理工具和持續集成工具中間的溝壑,禪道與ZTF的結合貫穿整個DevOps生命週期。
儘管DevOps目前是在全球大多數企業的軟件開發項目的技術背景下進行的,但在將來幾年,它將繼續在現代靜態網頁和動態軟件應用程序的開發中獲得多樣化的應用。
參考文獻:
Amol Muratkar.What is DevOps Lifecycle and How to Manage Yours [OL].(2020-03-26)
https://dzone.com/articles/what-is-devops-lifecycle-how-to-manage-yours