為新手準(zhǔn)備的DevOps工具鏈
譯文【51CTO.com快譯】DevOps是一種文化理念、流程和工具的組合。它可以在保證產(chǎn)品卓越質(zhì)量的同時,提高組織交付軟件的能力,以便更好地為客戶提供服務(wù),并在市場上搶占競爭優(yōu)勢。DevOps通過讓開發(fā)和IT運營團(tuán)隊實現(xiàn)自動化與集成化工作,協(xié)助他們快速、高質(zhì)量且可控地構(gòu)建、測試、部署和監(jiān)控應(yīng)用程序??梢哉f,在整個軟件的開發(fā)生命周期(SDLC)階段,它能夠?qū)崿F(xiàn)各項任務(wù)的自動化執(zhí)行,減少錯誤,消除瓶頸,以及減少不必要的返工。
什么是DevOps工具鏈?
DevOps的成功實施,往往依賴一組集成化的工具鏈。此類工具鏈能夠在整個系統(tǒng)開發(fā)的生命周期中,自動化地執(zhí)行設(shè)計、構(gòu)建、測試、交付、部署、管理、以及控制軟件應(yīng)用等任務(wù)。它能夠通過實現(xiàn)包括持續(xù)集成、持續(xù)交付、自動化協(xié)作與編排等關(guān)鍵性的DevOps原則,支持開發(fā)、運營、以及安全團(tuán)隊之間的異步協(xié)作,無縫地集成DevOps工作流,進(jìn)而更快、更高效地交付出產(chǎn)品。
DevOps工具鏈的商業(yè)優(yōu)勢
1.快速高效的部署
如今,軟件公司往往需要實現(xiàn)每天數(shù)次的部署與更新。這對于DevOps團(tuán)隊來說是一種挑戰(zhàn)。借助DevOps工具鏈,DevOps團(tuán)隊可以將自動化集成到軟件開發(fā)生命周期的每個階段,從而以更高質(zhì)量和更快效率的方式部署產(chǎn)品。據(jù)此,軟件公司可以確保每隔數(shù)小時進(jìn)行一次的部署,而非過去的每周僅部署一次。
2.事件管理
及時的事件響應(yīng)能夠確保業(yè)務(wù)的連續(xù)性。如今,企業(yè)不應(yīng)擔(dān)心“是否”會發(fā)生事故,而需要考慮的是“何時”出現(xiàn)問題。因此,它們必須準(zhǔn)備好快速、有效地響應(yīng)和解決事故的流程,以防止業(yè)務(wù)的中斷。
DevOps工具鏈可以優(yōu)化您的事件響應(yīng)策略,自動化事件管理的大部分初始過程,進(jìn)而加速解決的效率,并縮短停機(jī)時間。同時,工具鏈還可以通過接收和分析來自所有受影響系統(tǒng)的數(shù)據(jù),有效地協(xié)助創(chuàng)建事件報告。
3.提高軟件質(zhì)量
軟件錯誤與問題往往會阻礙軟件的開發(fā)過程,拖延發(fā)布的時間。因此,項目團(tuán)隊往往需要具備小時級的、快速準(zhǔn)確的問題識別和修復(fù)缺陷的能力。而DevOps工具鏈可以協(xié)作DevOps團(tuán)隊,主動地識別應(yīng)用程序的問題,根據(jù)問題的嚴(yán)重程度,對其進(jìn)行優(yōu)先級排序,進(jìn)而逐步修復(fù)問題。
4.工作流程自動化
2019年,在Evans Data Corp的DevOps與云調(diào)查中,針對工作流的管理工具,IT經(jīng)理會偏好收集與分析端到端的業(yè)務(wù)數(shù)據(jù);而開發(fā)人員會強調(diào)構(gòu)建可視化的、能夠操控數(shù)據(jù)的儀表板。借助DevOps工具鏈,項目團(tuán)隊既可以自動化地實時捕獲數(shù)據(jù),又能夠按需準(zhǔn)確、無縫地訪問與分析所需的數(shù)據(jù)。
5.安全性
安全性往往是懸在業(yè)務(wù)目標(biāo)頭上的“達(dá)摩克利斯之劍”。不過,許多組織一直未能就“誰負(fù)責(zé)安全”達(dá)成共識,這直接導(dǎo)致了數(shù)據(jù)意外泄露、與業(yè)務(wù)攻擊事件的頻發(fā)。而DevOps工具鏈可以給技術(shù)團(tuán)隊帶來持續(xù)監(jiān)控、合規(guī)、數(shù)據(jù)加密、以及事后審查報告等,組織級別的安全態(tài)勢。
如何構(gòu)建強大的DevOps工具鏈?
強大的DevOps工具鏈在加速DevOps優(yōu)勢方面,發(fā)揮著至關(guān)重要的作用。DevOps工具鏈必須遵循組織級別的方法,跨越所有團(tuán)隊、業(yè)務(wù)、流程、系統(tǒng)和應(yīng)用程序。此外,它必須結(jié)合對于每種工具如何優(yōu)化,以及加強DevOps生態(tài)系統(tǒng)中其他工具的洞見。
雖然DevOps工具鏈并沒有放之四海皆準(zhǔn)的統(tǒng)一標(biāo)準(zhǔn),但它們往往涉及到包含由版本控制、代碼質(zhì)量和持續(xù)集成等底層的最佳實踐和流程。在工具的選擇時,項目團(tuán)隊?wèi)?yīng)考慮諸如:遷移策略、可擴(kuò)展性、開源性和許可證成本等因素。通常,我們可以從版本控制和配置管理等基礎(chǔ)領(lǐng)域開始,逐步采用持續(xù)交付、部署和監(jiān)控等其他DevOps實踐類工具。
多合一的DevOps工具鏈
多合一的DevOps工具鏈提供了標(biāo)準(zhǔn)的、完備的產(chǎn)品,您可以根據(jù)自己的需求進(jìn)行選擇。對于剛開啟DevOps之旅的組織、或旨在快速啟動項目的團(tuán)隊而言,這是一種最佳的選擇。那些預(yù)先編排好的工具集,能夠促進(jìn)更高的標(biāo)準(zhǔn)化和命名資源的集成。不過,這些多合一的工具鏈也可能無法與團(tuán)隊現(xiàn)有的遺留工具進(jìn)行完美的集成,甚至造成潛在的阻礙。
可定制的DevOps工具鏈
另一種方法是選擇按需定制的工具集,并通過謹(jǐn)慎的編排,以集成到團(tuán)隊現(xiàn)有的DevOps管道中。這種類型的工具鏈可以防止團(tuán)隊被工具或供應(yīng)商鎖定。不過,自定義的DevOps工具鏈可能需要大量的管理資源與標(biāo)準(zhǔn)化的投入。
創(chuàng)建DevOps工具鏈的注意事項
為了創(chuàng)建實用的DevOps工具鏈,組織需要考慮如下四個主要方面:
保持相關(guān)性
隨時了解DevOps生態(tài)系統(tǒng)中的最新趨勢和創(chuàng)新。團(tuán)隊可以去主動了解行業(yè)內(nèi)的成功案例,并在不同的技術(shù)社區(qū),與他們互動交流與學(xué)習(xí)。
分析
分析和評估當(dāng)前的軟件開發(fā)過程及使用的工具,包括每個SDLC階段需要的時長、準(zhǔn)確性、及其效率。這將協(xié)助團(tuán)隊識別當(dāng)前系統(tǒng)中的漏洞和混亂的流程。
構(gòu)建
一旦確定了當(dāng)前系統(tǒng)中的漏洞,團(tuán)隊就需要通過選擇工具,來對系統(tǒng)進(jìn)行必要的修改。同時,他們在將理論知識付諸實踐的過程中,也需要構(gòu)建出各種工具鏈的原型。
可擴(kuò)展
為了在當(dāng)今瞬息萬變的IT市場中占有優(yōu)勢,企業(yè)應(yīng)當(dāng)能夠按需進(jìn)行無縫的調(diào)整和擴(kuò)展。為此,團(tuán)隊需要長遠(yuǎn)地規(guī)劃DevOps工具鏈,通過不同的策略來支持持續(xù)的維護(hù)、升級、定期配置、并能應(yīng)對各種不確定性。
DevOps工具的類別
項目管理工具
項目管理工具能夠幫助團(tuán)隊編制滿足客戶項目需求的代碼庫,將它們劃分為更小的任務(wù),并持續(xù)監(jiān)控任務(wù),直至完成。這些工具支持諸如Scrum、精益(Lean)和看板(Kanban)等敏捷項目管理的實踐。該領(lǐng)域的流行開源工具包括:GitHub Issues和 Jira。
源代碼存儲庫
版本控制類工具可以方便多名開發(fā)人員,同時在同一個代碼庫上工作。此類代碼存儲工具往往通過與CI/CD、安全性和測試工具相集成,以便代碼在提交到存儲庫時,能夠自動被移至下一步。該領(lǐng)域的流行開源工具包括:GitHub和GitLab。
CI/CD管道
持續(xù)集成和部署工具能夠自動化代碼的構(gòu)建、測試和部署。該領(lǐng)域的流行開源工具包括:市場上最富盛名的Jenkins和Kubernetes原生的CI/CD工具--Argo CD。
自動化測試框架
自動化測試框架包含各種用于自動化全部測試過程的軟件工具、庫和程序。其中包括單元測試、功能測試、合約測試、可用性測試、性能測試、滲透測試和安全測試等。此類工具大多能夠支持多種語言,有些甚至可以利用人工智能,來自動重新配置測試的流程,以響應(yīng)代碼的更改。當(dāng)然,此類測試工具往往比較昂貴。該領(lǐng)域的流行開源工具包括:Selenium、Katalon、Appium、Serenity和Robot Framework。
配置管理工具
配置管理工具有助于將基礎(chǔ)設(shè)施作為代碼進(jìn)行管理,從而避免了因跨環(huán)境而帶來的配置更改。通過執(zhí)行腳本,此類工具允許DevOps團(tuán)隊配置和提供完全版本化和文檔化的基礎(chǔ)設(shè)施。該領(lǐng)域的流行工具包括:Chef、Puppet、Ansible和Terraform。
監(jiān)控工具
監(jiān)控工具可以通過實時地收集和分析數(shù)據(jù),深入了解代碼更改是如何影響應(yīng)用程序性能的,進(jìn)而幫助DevOps工程師檢測和糾正系統(tǒng)中的問題。該領(lǐng)域的流行開源工具包括:Data dog、Nagios、Prometheus和Splunk。
持續(xù)反饋工具
此類工具通過熱圖(分析用戶的活動)、自助式問題反饋單或調(diào)查等各種渠道,收集用戶的反饋,進(jìn)而協(xié)助DevOps工程師解決問題,并提高相應(yīng)的產(chǎn)品質(zhì)量。
工件存儲庫
工件存儲庫存儲著所有待更新或更改的“重(heavy)”二進(jìn)制工件文件。它們是使用內(nèi)、外部源代碼存儲庫開發(fā)出的各種庫、DLL和二進(jìn)制文件的集合。該領(lǐng)域的流行工具包括:JFrog Artifactory和Nexus Repository。
問題跟蹤工具
在軟件開發(fā)生命周期中,清晰的透明度可以為DevOps團(tuán)隊提供深入的見解。而問題跟蹤工具可以協(xié)助他們對問題進(jìn)行編錄和跟蹤,并以更高效的響應(yīng)速度去快速解決問題。
協(xié)作和溝通工具
DevOps文化的精髓在于不同團(tuán)隊之間的無縫協(xié)作和溝通。而協(xié)作和溝通工具就能夠突破開發(fā)、測試、運營團(tuán)隊的位置與時區(qū)的障礙,開展流暢的協(xié)調(diào)和協(xié)同工作。該領(lǐng)域的流行工具包括:Slack、Campfire和Skype。
規(guī)劃工具
規(guī)劃工具可以根據(jù)整個組織的業(yè)務(wù)目標(biāo),為利益相關(guān)者、客戶和與不同團(tuán)隊提供所需的透明度,以協(xié)助各方制定沖刺計劃。該領(lǐng)域的流行工具包括:Asana和Clarizen。
編排工具
編排是確保自動化工作流實現(xiàn)構(gòu)建、測試、交付和部署的軟件應(yīng)用。此類工具既可以由內(nèi)部開發(fā)團(tuán)隊安裝和管理,又可以讓外包團(tuán)隊基于SaaS(軟件即服務(wù))來實現(xiàn)。該領(lǐng)域的流行工具包括:CircleCI、AzureDevOps和Jenkins。
源代碼管理
每個組織都需要通過一個集中化的存儲位置,來存放包括數(shù)據(jù)、文檔、代碼、配置和文件在內(nèi)的所有關(guān)鍵資產(chǎn)。源代碼控制工具不但可以實現(xiàn)該需求,還能夠?qū)?shù)據(jù)分類到不同的分支上,以供團(tuán)隊的使用。該領(lǐng)域的流行工具包括:SVN、Git和Subversion。
數(shù)據(jù)庫工具
數(shù)據(jù)庫管理工具能夠方便組織輕松地管理,由各個應(yīng)用程序開發(fā)和處理所產(chǎn)生的大量有價值的數(shù)據(jù)。該領(lǐng)域的流行工具包括:Razor SQL和Team Desk。
學(xué)習(xí)和掌握優(yōu)秀DevOps工具列表
目前,業(yè)界有各種付費和開源的DevOps流行工具可供選擇:
1.Docker
作為DevOps團(tuán)隊最常用的DevOps工具,Docker在DevOps生態(tài)系統(tǒng)中已廣受歡迎。據(jù)Forrester統(tǒng)計,它早在2018年第四季度就已主導(dǎo)了企業(yè)容器平臺的市場。Docker是一個基于Linux的開源工具,且支持容器化。據(jù)此,團(tuán)隊開發(fā)出的軟件能夠與其依賴項一起被打包,作為一個整體單元交付,進(jìn)而消除了單獨管理依賴項的繁瑣。Docker不但具有可移植性、安全性和與其他語言的兼容性,而且能夠與諸如:Ansible、Jenkins和Bamboo等工具無縫集成。
2.Ansible
作為軟件自動化領(lǐng)域的DevOps“寵兒”,Ansible以其自動化優(yōu)勢而聞名。它通常被用于自動化軟件的添置、配置管理和應(yīng)用程序部署。同時,開源的Ansible憑借著其無需代理、以及使用YAML語言編寫簡單語法的特性,方便了系統(tǒng)管理員輕松地處理各種復(fù)雜的部署。
3.Git
這款開源的DevOps工具能夠使得DevOps工程師輕松地跟蹤開發(fā)工作的進(jìn)度,并協(xié)調(diào)彼此之間的工作。通過Git,開發(fā)者不但可以恢復(fù)到以前保存過的工作版本,而且能夠在適當(dāng)?shù)臅r候單獨創(chuàng)建分支,并添加新的功能。不過,組織需要為其工作托管一個諸如GitHub的存儲庫。目前,Git已經(jīng)成為最受歡迎的DevOps工具之一。亞馬遜、微軟和Facebook等科技巨頭都在使用它。
4.Puppet
作為開源的DevOps工具,Puppet通過其數(shù)千個代碼模塊,方便DevOps團(tuán)隊管理與自動化各種軟件檢查、交付和操作。同時,它可以與許多工具無縫集成。不過,免費版的Puppet工具僅適合小型項目。針對大型項目的Puppet Enterprise則可以使團(tuán)隊擁有更多的資源和代碼。
5.Chef
作為最強大的開源配置管理工具之一,Chef允許開發(fā)人員將基礎(chǔ)架構(gòu)修改為代碼,以實現(xiàn)輕松地管理各類數(shù)據(jù)、屬性和角色等。與Puppet類似,Chef也可以支持多個平臺,并能夠與基于云端的平臺實現(xiàn)無縫的集成。無論基礎(chǔ)設(shè)施的規(guī)模如何,Chef都可以自動化基礎(chǔ)設(shè)施的配置,應(yīng)用程序的部署,甚至管理整個網(wǎng)絡(luò)的配置。
6.Jenkins
具有快速高效的代碼檢錯能力的Jenkins,不但可以自動化開發(fā)團(tuán)隊的交付管道,而且能夠為DevOps工程師近乎實時地測試和報告代碼中的更改。由于擁有上千個插件的龐大生態(tài)系統(tǒng),因此Jenkins不但可以與市場上幾乎所有可用的DevOps工具相集成,而且能與Linux、Windows和Mac OS X等系統(tǒng)相兼容。
7.Nagios
作為DevOps領(lǐng)域最受歡迎的監(jiān)控工具之一,免費開源的Nagios能夠協(xié)助識別和糾正網(wǎng)絡(luò)與基礎(chǔ)設(shè)施中的各種問題。DevOps團(tuán)隊不但可以用它來監(jiān)控應(yīng)用程序、服務(wù)和網(wǎng)絡(luò)協(xié)議等方面的狀態(tài),而且能夠記錄各種中斷和故障等事件。目前市場上有Nagios Core和Nagios XI兩個版本。其中,最新版本的Nagios XI提供了更多的新功能。當(dāng)然,這兩個版本都有相應(yīng)的論壇支持。
8.Splunk
Splunk能夠讓團(tuán)隊中的每個成員輕松地訪問和使用到目標(biāo)主機(jī)上的數(shù)據(jù)和日志。據(jù)此,DevOps工程師可以快速地分析和可視化機(jī)器數(shù)據(jù),并通過獲悉洞察力,來提高生產(chǎn)力和效率。開發(fā)人員既然可以開發(fā)自定義的Splunk應(yīng)用,又能夠并將Splunk數(shù)據(jù)集成到其他應(yīng)用程序中。
9.Bamboo
由Atlassian于2007年開發(fā)的Bamboo,是一種廣泛被使用的持續(xù)集成和部署工具。它會將自動化構(gòu)建、測試和發(fā)布集成到單個工作流中。雖然與Jenkins具有相似之處,但是Bamboo并不是一款開源的DevOps工具。通過它,開發(fā)人員能夠自動開發(fā)、集成、測試源代碼,以及部署應(yīng)用程序。此外,Bamboo的獨特功能還包括:易用的圖形化用戶界面,自動化完成,與各種工具的集成,以及預(yù)構(gòu)建等能力。
10.ELK Stack
Elasticsearch、Logstash和Kibana三種DevOps開源工具的組合被稱為ELK Stack。其中,Elasticsearch是一個搜索和分析類引擎,Logstash會從各個來源收集數(shù)據(jù),并由Elasticsearch存儲,而Kibana是一個可視化層次。ELK Stack可以被用于集中各種日志記錄。它不但具有多個插件,而且擁有一個活躍的支持社區(qū)。
11.Kubernetes
該容器編排平臺發(fā)布于2015年,可以幫助團(tuán)隊輕松地管理大量容器。在將容器化應(yīng)用程序部署到一組服務(wù)器上后,Kubernetes會自動進(jìn)行分發(fā)和調(diào)度。當(dāng)然,Kubernetes 只是一個編排平臺,并非一套完整的解決方案。它必須與諸如Docker等其他工具配合使用,實現(xiàn)開發(fā)、分發(fā)和運行容器。
12.Selenium
作為著名的自動化Web應(yīng)用測試工具,開源的Selenium正在被谷歌和IBM等許多財富500強公司所使用。Selenium的獨特之處在于,其測試腳本可以采用Python和Java等多種語言編寫。它能夠與Windows、Mac和Linux等操作系統(tǒng)相兼容,并適用于任何瀏覽器。為了實現(xiàn)持續(xù)測試目的,Selenium應(yīng)當(dāng)與Docker和Jenkins相集成。
13.Vagrant
作為一種倍受歡迎的開源DevOps工具,Vagrant可以讓開發(fā)者、操作員、以及設(shè)計師在共享的簡單且單獨的工作流中,開發(fā)和管理虛擬機(jī)環(huán)境。通過復(fù)制生產(chǎn)環(huán)境,Vagrant能夠方便DevOps工程師在生產(chǎn)過程的早期,識別和修復(fù)各項錯誤。同時,該工具也可以輕松地與Ansible、Chef和Puppet等相集成。
14.Maven
開源的Maven工具主要被用在Java類型的項目中,其主要功能是對自動化構(gòu)建過程和依賴項進(jìn)行解析。Maven能夠協(xié)助編譯源代碼,運行單元測試和功能測試,并將結(jié)果集成到JAR、WAR和RPM等文件包中,進(jìn)而上傳到Nexus或Artifactory等遠(yuǎn)程數(shù)據(jù)倉庫中。同時,由于該工具是基于項目對象模型的概念開發(fā)的,因此Maven會依賴于XML,并帶有執(zhí)行常規(guī)任務(wù)的預(yù)定義指令。
15.Gradle
同樣作為DevOps自動化開源工具的Gradle,能夠支持采用包括Java、C++和Python等多種語言編寫代碼。盡管Gradle構(gòu)建在Apache Ant和Maven之上,但它使用基于Groovy的特定領(lǐng)域語言,來描述構(gòu)建。自2009年被發(fā)布以來,該工具一直在多種項目構(gòu)建中提供穩(wěn)健的服務(wù)。而且由于能夠提供增量式構(gòu)建、構(gòu)建緩存和守護(hù)進(jìn)程,因此Gradle比Maven更加高效。
DevOps的編排
DevOps編排對于任何正在或已完成自動化實施的組織來說,都是至關(guān)重要的一步。它能夠通過協(xié)調(diào)由DevOps實踐進(jìn)行自動化的所有任務(wù),以提供改進(jìn)和優(yōu)化的建議??偟恼f來,DevOps編排可以提供如下業(yè)務(wù)優(yōu)勢:
- 更快的軟件交付
- 快速發(fā)布新的功能和結(jié)構(gòu)
- 最小化部署的時間
- 降低服務(wù)交付的成本
- 提高產(chǎn)品的可靠性
雖然DevOps編排能夠方便分析師、IT經(jīng)理和QA人員根據(jù)自己的興趣,通過快速實施,在適當(dāng)?shù)臉?gòu)建和配置級別上,實現(xiàn)完備的產(chǎn)品環(huán)境,但是編排在DevOps中并非一蹴而就。團(tuán)隊往往需要通過不斷測試和積累經(jīng)驗,才能構(gòu)建出完全符合其業(yè)務(wù)目標(biāo)的編排工具,進(jìn)而充分利用其自動化,給項目和產(chǎn)品帶來深度和廣度上的全面轉(zhuǎn)變。
原文標(biāo)題:DevOps Toolchain for Beginners,作者:Vishnu Vasudevan
【51CTO譯稿,合作站點轉(zhuǎn)載請注明原文譯者和出處為51CTO.com】