什麼是DevOps?DevOps從何而來?

DevOps概念已經被越來越多的人所熟知,本文將從不同職能與DevOps的聯繫,以及DevOps運動如何演變入手,希望可以幫助你對DevOps有更深刻的理解。

1

DevOps從哪來?


DevOps是敏捷軟件開發的產物,它是敏捷軟件開發的產物,是敏捷軟件開發為了跟上軟件開發速度和實現吞吐量而產生的。在過去的十年中,敏捷文化和方法的進步揭示了對端到端軟件交付生命週期更全面的方法的需求。

什麼是敏捷軟件開發?

敏捷開發是幾個迭代和增量軟件開發方法的總稱。最流行的敏捷方法包括Scrum、看板、伸縮敏捷框架(安全)、精益開發和極限編程(XP)。


什麼是敏捷軟件開發?

雖然每一種敏捷方法在其特定的方法上都是獨特的,但它們都有共同的願景和核心價值(參見敏捷宣言)。它們都從根本上結合了迭代和迭代所提供的連續反饋,從而不斷地改進和交付軟件系統。它們都涉及到持續的計劃、持續的測試、持續的集成,以及項目和軟件的其他形式的持續發展。它們都是輕量級的,尤其是與傳統的瀑布式流程相比,並且具有固有的適應性。關於敏捷方法最重要的一點是,它們都集中於授權人們快速有效地協作並一起做出決策。

一開始,敏捷團隊主要由開發人員組成。隨著這些敏捷團隊在生產軟件方面變得越來越高效,很明顯,將質量保證(QA)和開發作為單獨的團隊是低效的。敏捷發展到包括QA,以提高軟件交付的速度,現在敏捷再次發展到包括交付和支持成員,以將敏捷從構思擴展到交付。

DevOps理念通過在構建、驗證、部署和交付階段進一步簡化軟件變更的移動,從而擴展了敏捷開發實踐,同時賦予跨職能團隊從設計到生產支持對軟件應用程序的完全所有權。

DevOps是一種IT思維方式,它鼓勵軟件開發人員和IT操作人員之間的交流、協作、集成和自動化,以提高交付軟件的速度和質量。

DevOps團隊專注於標準化開發環境和自動化交付過程,以提高交付的可預測性、效率、安全性和可維護性。DevOps理念為開發人員提供了對生產環境的更多控制,以及對生產基礎設施的更好理解。DevOps鼓勵授權團隊自主構建、驗證、交付和支持他們自己的應用程序。


2

DevOps解決了哪些挑戰?

在開發DevOps應用程序之前,團隊負責收集軟件程序的業務需求並編寫代碼。然後,如果滿足需求,則由單獨的QA團隊在單獨的開發環境中測試程序,併發布操作要部署的代碼。部署團隊被進一步分割成孤立的組,比如網絡組和數據庫組。每當一個軟件程序被扔到一個獨立的團隊中,它就增加了瓶頸。這種範例的問題在於,當團隊分開工作時


  • 開發人員通常不知道QA和Ops的障礙,這些障礙會阻止程序按照預期的方式工作。
  • QA和Ops通常跨許多特性工作,很少涉及軟件的商業目的和價值。
  • 每個小組都有相反的目標,當事情出錯時,就會導致效率低下和相互指責。

DevOps通過建立協作的跨功能團隊來解決這些挑戰,這些團隊共同承擔維護運行軟件的系統的責任,並準備軟件在系統上運行,同時增加質量反饋和自動化問題。

一個常見的前devops場景

開發團隊的目標是發佈儘可能多的功能,他們會向QA提交一個新版本。然後測試人員的目標就是找到儘可能多的bug。當測試人員將他們的發現提交給開發人員時,開發人員會變得有戒心,並責怪測試環境中的測試人員。測試人員回答說,問題不在於他們的測試環境,而在於開發人員的代碼。


最終問題被解決了,QA把經過調試的新版本交給了Ops。Ops團隊的目標是限制對他們系統的更改,但是他們擔心發佈代碼會導致系統崩潰,互相指責。


Ops說Dev給他們提供了錯誤的工件。Dev說在測試環境中一切都運行良好。生產環境不是開發人員和質量保證人員的職責,所以當Ops花費整晚的時間來解決生產問題時,他們不會插手。


3

DevOps的目標是什麼?


改進所有涉眾之間的協作,從計劃到交付,以及交付過程的自動化


  • 提高部署頻率
  • 爭取更快上市時間
  • 降低新版本的失敗率
  • 縮短修復時間
  • 縮短平均恢復時間

根據2015年DevOps狀態報告,“高效能的IT組織部署頻率提高30倍,交貨時間縮短200倍;他們的故障減少了60倍,恢復速度提高了168倍。”

常見的Pre-DevOps場景軟件團隊在開始新的軟件項目之前會面。團隊包括開發人員、測試人員、操作人員和支持專業人員。該團隊計劃如何創建可用於部署的工作軟件。

每天,當開發人員完成代碼時,都會部署新的代碼。自動化測試確保代碼可以部署。在代碼通過所有自動化測試之後,它將被部署到少數用戶中。對新代碼進行短期監控,以確保不會出現無法預料的問題並且穩定。一旦監控顯示新代碼是穩定的,新代碼就會擴散到其他用戶。規劃和開發之後的許多(如果不是全部的話)步驟都無需人工干預。


4

你在DevOps中處於什麼位置?

DevOps連續體是查看DevOps不同方面的一種有用的方法。底部的橫軸表示人們認為DevOps從根本上應該關注的內容。一些人堅定地認為DevOps應該更重視文化而不是工具,而另一些人則傾向於重視工具而不是文化。


什麼是DevOps?DevOps從何而來?

縱軸描述了DevOps交付鏈的三個層次:持續集成、持續交付和持續部署。DevOps社區將位於DevOps連續體右上方的組織稱為粉色獨角獸,因為目前這種組織太少了.這些獨角獸公司中最流行的示例是Netflix、Etsy、亞馬遜、Pinterest、Flicker、IMVU和谷歌。在在最近的一次民意測驗中,參與者指出了他們的組織適合DevOps連續體的位置:

  • 左下55%
  • 右下角26%
  • 14%左上
  • 5%右上

思想領袖、博客作者經常在右上角描繪DevOps的願景,他們往往對DevOps文化或自動化工具有強烈的偏見。關於DevOps文化和工具哪個更重要的爭論從未停止,但事實是沒有工具你就不能擁有DevOps,如果你沒有強大的支持文化,那麼世界上所有的工具都不會有幫助。

5

DevOps成熟的階段是什麼?

瀑布發展

在持續集成之前,開發團隊需要花三到四個月的時間編寫一組代碼。然後這些團隊會合並他們的代碼以發佈它。不同版本的代碼會非常不同,並且更改太多,以至於實際的集成步驟可能要花費數月的時間這個過程非常低效。

持續集成

持續集成是將新開發的代碼與將要發佈的代碼主體快速集成的實踐。當團隊準備發佈代碼時,持續集成可以節省大量時間。

DevOps沒有提出這個術語。持續集成是一種源自極限編程方法的敏捷工程實踐。這些術語已經存在了一段時間,但是DevOps採用了這個術語是因為成功進行連續集成需要自動化。持續集成通常是實現DevOps成熟的第一步。

從DevOps的角度來看,持續集成過程包括檢入代碼,將其編譯成可用的(通常是二進制可執行的)代碼,並運行一些基本的驗證測試。

持續交付

持續交付是持續集成的擴展[DevOps階段2]。它位於持續集成之上。在執行持續交付時,通過添加自動化和測試,就不需要頻繁地將代碼與主代碼行合併,而是在幾乎沒有人工干預的情況下部署代碼。這是一種讓代碼庫持續處於準備部署狀態的實踐。

持續部署

持續部署,不要和持續交付混淆,它是持續交付的最先進的進化。這是在沒有任何人工干預的情況下將所有方式完全部署到生產中的實踐。

使用持續交付的團隊不會部署未經測試的代碼;相反,新創建的代碼在被推出生產之前通過自動化測試運行。代碼發佈通常只對一小部分用戶開放,在代碼進一步傳播之前,會有一個自動的反饋循環來監控質量和使用情況。

只有極少數的公司真正實踐了持續部署。Netflix、Etsy、亞馬遜、Pinterest、Flicker、IMVU和谷歌都是進行持續部署的公司的成功示例。

6

DevOps的價值是什麼?


DevOps專注於建立協作文化並通過使用DevOps工具進行自動化來提高效率。雖然某些組織和人員傾向於彼此珍視,但事實是,要成功就需要文化和工具的結合。這是您需要了解的這兩個DevOps值的信息。

DevOps著重於建立一種協作文化,並通過使用DevOps工具的自動化來提高效率。

DevOps文化

DevOps文化的特點是增加協作、減少孤島、共享責任、自治團隊、提高質量、重視反饋和增加自動化。許多DevOps值都是敏捷值,因為DevOps是敏捷的擴展。

敏捷方法是一種更全面的軟件交付方式。敏捷開發團隊根據可工作的軟件來度量進展。產品負責人、開發人員、測試人員和用戶體驗人員為了相同的目標緊密合作。

DevOps只是在敏捷團隊中加入了運維的思維模式,或許還會加入一名負責這些工作的團隊成員。在DevOps之前,進度是根據工作軟件來衡量的,而DevOps的進度是根據客戶手中的工作軟件來衡量的。

為了實現這一點,開發人員和運維人員必須打破孤島,彼此協作,共同維護運行軟件的系統,準備在系統上運行的軟件,並增加質量反饋和交付自動化。

DevOps工具

DevOps工具包括配置管理、測試和構建系統、應用程序部署、版本控制和監視工具。持續集成、持續交付和持續部署需要不同的工具。雖然這三種實踐都可以使用相同的工具,但是隨著交付鏈的進展,將需要更多的工具。

7

DevOps中使用哪些工具?


前面我們簡要討論了DevOps中使用的一些工具;下面是一些需要了解的關鍵工具和實踐。

源代碼庫

源代碼存儲庫是開發人員簽入和更改代碼的地方。源代碼存儲庫管理簽入的不同版本的代碼,因此開發人員不必重寫彼此的工作。

流行的源代碼存儲庫工具有Git、Subversion、Cloudforce、Bitbucket和TFS。

構建服務器

構建服務器是一種自動化工具,它將源代碼存儲庫中的代碼編譯為可執行代碼庫。流行的工具有Jenkins, SonarQube和Artifactory。

配置管理

配置管理定義服務器或環境的配置。流行的配置管理工具是Puppet和Chef。

虛擬基礎架構

AmazonWeb Services和Microsoft Azure就是虛擬基礎設施的例子。虛擬基礎設施由出售基礎設施或平臺即服務(PaaS)的雲供應商提供。這些基礎設施具有api,允許您使用配置管理工具(如Puppet和Chef)以編程方式創建新機器。也有私有云。例如,VMware有vCloud。私有虛擬基礎設施允許在數據中心的硬件上運行雲。

虛擬基礎架構與自動化工具相結合,使組織實踐DevOps的組織無需配置任何鍵盤即可配置服務器。如果要測試全新的代碼,則可以將其自動發送到雲基礎架構,構建環境,然後運行所有測試,而無需人工干預。

測試自動化

測試自動化已經存在很長時間了。DevOps測試集中於構建管道中的自動化測試,以確保擁有可部署的構建時,已經準備好部署。在沒有任何人工干預的情況下,不可能達到連續交付的結果,因為在沒有廣泛的自動化測試策略的情況下,代碼是可以部署的。最流行的工具是Selenium and Water。

管道編排

管道就像一條生產裝配線,從開發人員說“我想我已經完成”一直到代碼被部署到生產或後期預生產環境中為止一直髮生。


分享到:


相關文章: