大綱
DevOps是什么?與圍繞軟件開發(fā)的大多數(shù)流行語一樣,DevOps沒有公認(rèn)的定義。 定義從簡單(如這兩個定義)到復(fù)雜(可以持續(xù)一整本書)不等。
與其嘗試定義DevOps,不如讓我們了解軟件開發(fā)如何演變?yōu)镈evOps。 瀑布模型(Waterfall)幾十年前,軟件開發(fā)以Waterfall模型為中心。 Waterfall模型開發(fā),與建筑項目類似-例如,建立一座令人驚嘆的橋梁。 你將分多個階段構(gòu)建軟件,這些階段可以持續(xù)幾周到幾個月不等。 在大多數(shù)Waterfall項目中,企業(yè)要幾個月才能看到應(yīng)用程序的有效版本。 構(gòu)建優(yōu)秀軟件的關(guān)鍵要素在瀑布模型中工作了幾十年,我了解到了開發(fā)出色軟件的一些關(guān)鍵要素:
溝通的重要性軟件開發(fā)是一項涉及多種技能的跨學(xué)科工作。 人與人之間的交流對于軟件項目的成功至關(guān)重要。 在瀑布模型中,我們嘗試通過準(zhǔn)備有關(guān)需求,設(shè)計,體系結(jié)構(gòu)和部署的詳細文檔來增強交流。 但是,一段時間以來,我們了解到
早期反饋的重要性快速獲得反饋很重要。開發(fā)出色的軟件就是要獲得快速反饋。
你不能等待幾個月才能獲得反饋。你可能想快速了解。
我們越早發(fā)現(xiàn)問題,越容易解決。 我們發(fā)現(xiàn),最好的軟件團隊通常是快速反饋。幫助我們知道是否盡早在做正確的事情。 自動化的重要性自動化至關(guān)重要。軟件開發(fā)涉及廣泛的活動。手動執(zhí)行操作速度很慢且容易出錯。 在了解了開發(fā)出色軟件的關(guān)鍵要素之后,讓我們看看我們?nèi)绾窝葑優(yōu)槊艚蓍_發(fā)和DevOps。 敏捷開發(fā)發(fā)展如果通過加強團隊之間的溝通,獲取快速反饋和引入自動化,敏捷開發(fā)是第一步。 敏捷開發(fā)將業(yè)務(wù)團隊和開發(fā)團隊整合為一個團隊,該團隊致力于以小型迭代(稱為Sprints)構(gòu)建出色的軟件。 敏捷開發(fā)關(guān)注開發(fā)周期不是在數(shù)周或數(shù),而是在幾天甚至一天之內(nèi)的小需求。 敏捷開發(fā)如何增強團隊之間的溝通?敏捷開發(fā)使業(yè)務(wù)團隊和開發(fā)團隊聚集在一起。
在敏捷開發(fā)中,業(yè)務(wù)代表(通常稱為產(chǎn)品負責(zé)人)經(jīng)常出現(xiàn)在團隊中,團隊可以清楚地了解業(yè)務(wù)目標(biāo)。 當(dāng)開發(fā)團隊對需求的理解不正確并且走錯了路時,產(chǎn)品負責(zé)人將幫助他們進行課程更正,并保持正確的道路。
另一個重要因素,是敏捷開發(fā)團隊具有跨職能的技能:編碼技能(前端,API和數(shù)據(jù)庫),測試技能和業(yè)務(wù)技能。 敏捷開發(fā)與自動化敏捷開發(fā)團隊關(guān)注哪些自動化領(lǐng)域? 軟件產(chǎn)品可能具有多種缺陷:
通常,敏捷開發(fā)團隊專注于使用自動化來盡早發(fā)現(xiàn)技術(shù)和功能缺陷。 敏捷開發(fā)團隊專注于自動化測試。編寫出色的單元測試以測試你的方法和類。編寫出色的集成測試以測試你的模塊和應(yīng)用程序。敏捷開發(fā)團隊還廣泛關(guān)注代碼質(zhì)量–使用諸如SONAR之類的工具來評估應(yīng)用程序的代碼質(zhì)量。 如果你擁有出色的自動化測試和出色的代碼質(zhì)量檢查,是否就足夠了? 你可能還希望盡可能經(jīng)常地運行它們。敏捷開發(fā)團隊專注于持續(xù)集成。提交代碼,運行單元測試,自動化測試和代碼質(zhì)量檢查。這些都是在持續(xù)集成管道中自動執(zhí)行的。在敏捷開發(fā)早期,最受歡迎的CI/CD工具是Jenkins。 敏捷開發(fā)如何促進即時反饋?最重要的因素是,企業(yè)無需等待數(shù)月即可看到最終產(chǎn)品。在每次版本迭代結(jié)束時,都會將該產(chǎn)品演示給所有利益相關(guān)者。在優(yōu)先考慮下一次版本迭代結(jié)束時,將采納所有反饋。結(jié)果:團隊構(gòu)建的最終產(chǎn)品是企業(yè)想要的東西。 能夠立即反饋的另一個重要因素是–持續(xù)集成。假設(shè)我將一些代碼提交到版本控制中,在30分鐘內(nèi),如果我的代碼導(dǎo)致單元測試失敗或集成測試失敗,我將獲得反饋。如果我的代碼不符合代碼質(zhì)量標(biāo)準(zhǔn)或在單元測試中沒有足夠的代碼覆蓋率,我將獲得反饋。 敏捷開發(fā)成功了嗎?是。當(dāng)然。通過專注于改善業(yè)務(wù)與開發(fā)團隊之間的溝通,并著重于盡早發(fā)現(xiàn)各種缺陷,Agile將軟件開發(fā)提升到了一個新的水平。 但是,出現(xiàn)了新的挑戰(zhàn)。 微服務(wù)架構(gòu)的演變現(xiàn)在,我們慢慢開始轉(zhuǎn)向微服務(wù)架構(gòu),并且開始構(gòu)建許多小型API,而不是構(gòu)建大型整體應(yīng)用程序。 新的挑戰(zhàn)是什么?
是時候在軟件開發(fā)中使用新的流行語了–DevOps。 DevOps的出現(xiàn)DevOps的重點是什么? DevOps的重點是加強開發(fā)與運維團隊之間的溝通。
DevOps如何增強團隊之間的溝通?DevOps使運維團隊與開發(fā)團隊更加接近。
DevOps團隊關(guān)注的自動化領(lǐng)域是什么?除了敏捷開發(fā)的重點領(lǐng)域(持續(xù)集成和測試自動化)外,DevOps團隊還致力于幫助使運維團隊自動化,例如,在服務(wù)器上配置軟件,部署應(yīng)用程序以及監(jiān)視生產(chǎn)環(huán)境。一些關(guān)鍵術(shù)語是持續(xù)部署和基礎(chǔ)架構(gòu)即代碼。 持續(xù)部署就是要在測試環(huán)境上持續(xù)部署新版本的軟件。在像Google,F(xiàn)acebook這樣的更成熟的組織中,Continuous Delivery可幫助將軟件連續(xù)部署到生產(chǎn)中。 基礎(chǔ)設(shè)施即代碼就是將基礎(chǔ)設(shè)施視為應(yīng)用程序代碼。你可以使用自動化配置方式創(chuàng)建基礎(chǔ)結(jié)構(gòu)(服務(wù)器,負載平衡器和數(shù)據(jù)庫)。你將對基礎(chǔ)結(jié)構(gòu)進行版本控制-以便可以跟蹤。 DevOps如何促進即時反饋?DevOps將運維和開發(fā)團隊召集在一起。因為運維和開發(fā)都是同一團隊的一部分,所以整個團隊都了解與運維和開發(fā)相關(guān)的挑戰(zhàn)。
DevOps鼓勵將持續(xù)集成,持續(xù)交付和基礎(chǔ)架構(gòu)作為代碼。
盡管我們說敏捷開發(fā)和DevOps是使事情變得簡單的兩個不同的事物,但實際上,對于DevOps的含義沒有公認(rèn)的定義。 我認(rèn)為敏捷開發(fā)和DevOps是兩個階段,可以幫助我們改善構(gòu)建出色軟件。他們不會互相競爭,但是可以一起幫助我們構(gòu)建出色的軟件產(chǎn)品。 就我而言,敏捷開發(fā)和DevOps是相輔相成
DevOps的故事如果你是團隊中的明星開發(fā)人員,因此軟件問題需要你快速解決。 你要 checkout 項目。 你要快速創(chuàng)建本地環(huán)境。 你要修改代碼。 你要更新單元測試和自動化測試。 你要提交提交代碼。 你會收到一封電子郵件,指出將進行質(zhì)量檢查。 一些集成測試會自動運行。 你的質(zhì)量檢查小組會收到一封電子郵件,要求你批準(zhǔn)。他們進行手動測試并批準(zhǔn)。 你的代碼將在幾分鐘內(nèi)投入生產(chǎn)。 這就是DevOps的故事。 DevOps = Development + Operations
DevOps專注于人員,流程和產(chǎn)品。DevOps的“人員”部分是關(guān)于文化和樹立良好思維模式的,這是一種促進開放式溝通并重視快速反饋的文化,一種重視高質(zhì)量軟件的文化。 敏捷開發(fā)幫助彌合了業(yè)務(wù)團隊與開發(fā)團隊之間的鴻溝。開發(fā)團隊了解業(yè)務(wù)的優(yōu)先級,并與業(yè)務(wù)合作,以提供最有價值的故事為先。但是,開發(fā)團隊和運維團隊并沒有保持一致。 他們有不同的目標(biāo)。
如你所見,如果將產(chǎn)品投入生產(chǎn)很困難,那么開發(fā)人員和運維人員就無法保持一致。
開發(fā)團隊與運維團隊合作,以了解和解決運維難題。Ops團隊是Scrum團隊的成員,了解開發(fā)中的功能。
開發(fā)人員和運維人員結(jié)合-選項1在成熟的DevOps企業(yè)中,Dev和Ops是同一Scrum團隊的一部分,彼此分擔(dān)責(zé)任。 開發(fā)人員和運維人員結(jié)合選項2但是,如果你處在DevOps演進的早期階段,那么如何才能使Dev和Ops擁有共同的目標(biāo)并一起工作呢? 你可以執(zhí)行以下操作:
由于自動化,出現(xiàn)了另一個有趣的選擇。通過將基礎(chǔ)結(jié)構(gòu)即代碼并為開發(fā)人員啟用預(yù)配置,你可以創(chuàng)建操作和開發(fā)團隊可以理解的通用語言-代碼。 DevOps用例此圖展示了兩個簡單的工作流程
這聽起來復(fù)雜嗎? 讓我們分解一下,嘗試并理解它們。 讓我們從No 2開始-首先是持續(xù)部署。 No 2:使用Azure DevOps和Jenkins進行DevOps連續(xù)部署
開發(fā)人員將代碼提交到版本控制系統(tǒng)后,將立即執(zhí)行以下步驟:
一旦獲得測試團隊的批準(zhǔn),該應(yīng)用程序?qū)⒘⒓床渴鸬絅ext Environment。 這稱為連續(xù)部署。如果你持續(xù)部署到生產(chǎn)環(huán)境,則稱為持續(xù)交付。 最受歡迎的CI / CD工具是Azure DevOps和Jenkins No 1:使用Terraform實現(xiàn)DevOps中的基礎(chǔ)架構(gòu)即代碼在過去,我們創(chuàng)建環(huán)境并手動部署應(yīng)用程序。 每次創(chuàng)建服務(wù)器時,都需要手動完成。
你手動進行。 這是什么結(jié)果?
基礎(chǔ)架構(gòu)即代碼基礎(chǔ)架構(gòu)即代碼—像應(yīng)用程序代碼一樣對待基礎(chǔ)架構(gòu) 這是基礎(chǔ)架構(gòu)即代碼應(yīng)理解的一些重要事項
最受歡迎的IaC工具是Ansible和Terraform。 通常,這些是IaC中的步驟
服務(wù)器配置最受歡迎的配置工具是CloudFormation和Terraform。 使用Terraform,你可以預(yù)配置服務(wù)器和基礎(chǔ)架構(gòu)的部分,例如負載平衡器,數(shù)據(jù)庫,網(wǎng)絡(luò)配置等。你可以使用使用Packer和AMI等工具預(yù)創(chuàng)建鏡像來創(chuàng)建服務(wù)器(Amazon Machine Image)。 配置管理配置管理工具用于
流行的配置管理工具是Chef,Puppet,Ansible和SaltStack。這些旨在在現(xiàn)有服務(wù)器上安裝和管理軟件。 Docker和Kubernetes在DevOps中的作用Docker和Kubernetes在DevOps中的作用是什么? 在微服務(wù)世界中,可能會使用Java構(gòu)建一些微服務(wù),使用Python構(gòu)建一些微服務(wù),以及使用JavaScript構(gòu)建一些微服務(wù)。
使用Docker,你可以構(gòu)建微服務(wù)的鏡像-不管它們的語言如何。你可以在任何基礎(chǔ)架構(gòu)上以相同方式運行這些鏡像。 這簡化了操作。 Kubernetes通過幫助協(xié)調(diào)不同類型的容器并將其部署到集群。 Kubernetes還提供:
Docker和Kubernetes使DevOps變得容易。 重要的DevOps指標(biāo)以下是一些重要的DevOps指標(biāo)。
DevOps最佳做法以下是DevOps的一些最佳做法
如何衡量DevOps實施的成熟度你如何衡量DevOps實施的成熟度?這里是一些重要的問題。 開發(fā)
測試
部署方式
監(jiān)控方式
團隊與流程
譯者:王延飛 原文鏈接:https:///articles/devops-tutorial-devops-with-docker-kubernetes-and# |
|