DevOps工具鏈全接觸
譯文【51CTO.com快譯】
眾所周知,DevOps的目標是分階段推進軟件的開發(fā)進程,通過持續(xù)迭代與改進,進而敏捷地交付客戶滿意的軟件產(chǎn)品。那么常言道:“工欲善其事,必先利其器。”好的工具對于項目團隊來說,可以起到如虎添翼的效果。本文將向您介紹DevOps的整個工具鏈,其中包括:規(guī)劃、問題跟蹤、源代碼管理、構(gòu)建、測試代碼、持續(xù)集成和部署、管理配置、監(jiān)控和記錄、交流、以及知識共享。
規(guī)劃
規(guī)劃在DevOps中的重要性體現(xiàn)在如下三個方面:
- 設定共同的目標
- 提高透明度
- 提前賦權(quán)
可用于規(guī)劃的工具包括:
GitLab
GitLab是基于Web的DevOps生命周期工具。它提供了基于Git存儲庫的管理器。通過由GitLab開發(fā)的開源許可證,它可以提供Wiki、問題跟蹤、以及CI/CD管道等功能。用戶可以通過它自帶的工具進行實際規(guī)劃,或是查看工作范圍。
Tasktop
Tasktop允許將各種現(xiàn)有工具添加到,由Tasktop所支持的應用生命周期管理(ALM)、PPM和ITSM工具中,從而在整個生命周期中實現(xiàn)可視化和敏捷性。
CollabNet’s VersionOne
VersionOne支持Scrum、Kanban、XP、SAFe、以及混合開發(fā)方法。它能夠輕松地實現(xiàn)橫跨所有團隊、流程、軟件產(chǎn)品組合、以及企業(yè)計劃的跟蹤和報告。
Pivotal Tracker
可方便身處各地的開發(fā)人員通過敏捷的項目管理工具,實現(xiàn)共享待辦事項的優(yōu)先級,以及開展實時的協(xié)作。
Trello
Trello是一種基于Web的Kanban風格的列表制作(list-making)應用。許多團隊在計劃單個工作沖刺(sprints)時都會用到它。
Azure Boards
Azure Boards可使用包括Scrum板、Kanban板、以及儀表板在內(nèi)的敏捷工具,來跟蹤軟件項目,并使用敏捷方法進行更好的規(guī)劃。用戶可以使用Azure Boards來實現(xiàn)可視化工作,共享計劃,跟蹤進度,以及確保方法的正確性。
問題跟蹤
問題跟蹤在DevOps中的重要性體現(xiàn)在如下三個方面:
- 客戶的響應能力
- 突破有限的知識線索
- 提供反饋回路
可用于問題跟蹤的工具包括:
Atlassian’s Jira
Jira是由Atlassian開發(fā)的問題跟蹤專用產(chǎn)品,可被用于錯誤跟蹤和敏捷項目管理等場景中。
JetBrains’s YouTrack
YouTrack是由JetBrains開發(fā)的、基于商業(yè)瀏覽器的、專用錯誤與問題跟蹤系統(tǒng)。同時,它也是一款項目管理軟件。YouTrack通過自動化完成,問題批量處理,自定義問題屬性集與工作流等功能,來實現(xiàn)基于查詢的問題搜索。
Zendesk
Zendesk使您可以輕松地從多個渠道跟蹤每一個客戶問題。像Uber和Airbnb之類的公司,都在使用Zendesk作為他們的問題跟蹤軟件。
源代碼控制
源代碼控制的重要性體現(xiàn)在如下三個方面:
- 管控資產(chǎn)
- 避免無效的代碼上傳
- 給團隊賦能
可用于源代碼控制的工具包括:
Git
作為分布式版本控制系統(tǒng),Git可被用于在軟件開發(fā)的過程中,跟蹤源代碼的更改。為協(xié)調(diào)程序員之間的工作而設計的Git,能夠跟蹤文件的更改,數(shù)據(jù)的完整性,以及對分布式非線性工作流提供支持。
GitHub
GitHub通過自帶的各項功能,提供了針對Git的分布式版本控制和源代碼管理。
GitLab
GitLab可實現(xiàn)對源代碼的版本管理,幫助開發(fā)團隊共享、協(xié)作、并提高生產(chǎn)力。
Bitbucket
由Atlassian帶來的、基于Web的Bitbucket,是一種版本控制庫類型的托管服務。它可以被用于Mercurial或Git之類版本控制系統(tǒng)的源代碼和開發(fā)項目場景中。
Subversion
持有Apache開源許可的Subversion是一個軟件版本控制系統(tǒng)。軟件開發(fā)人員可以使用Subversion,來維護源代碼、網(wǎng)頁、以及文檔的當前版本和歷史版本。
構(gòu)建工具
構(gòu)建工具在DevOps中的重要性體現(xiàn)在如下三個方面:
- 封裝一致性
- 自動執(zhí)行各種易錯的活動
- 初步判斷質(zhì)量水平
可用于構(gòu)建的工具包括:
Maven/Gradle
Maven是主要被用于Java項目構(gòu)建的自動化工具,當然它也可以被用于構(gòu)建和管理用C#、Ruby、Scala、以及其他語言編寫的項目。
Gradle是一個開源的自動化構(gòu)建系統(tǒng)。它基于Apache Ant和Apache Maven的概念,引入了基于Groovy的域特定(domain-specific)語言,而不像Apache Maven那樣使用XML形式,來聲明項目的配置。
MSBuild
Microsoft Build Engine(也稱MSBuild)是用于代碼托管,以及本機C++代碼的免費開源構(gòu)建工具集。同時,它也是.NET Framework的一部分,能夠與Visual Studio進行聯(lián)動。
Rake
Rake是一種軟件任務管理與自動化構(gòu)建工具。用戶既可以用它來指派任務、描述依賴關系,又能夠在名稱空間中的對任務進行分組。
JFrog Artifactory
JFrog Artifactory可以針對在存儲構(gòu)建過程的二進制輸出,進行分發(fā)和部署。Artifactory提供了對于Maven、Debian、npm、Helm、Ruby、Python和Docker等多種軟件包格式的支持。而JFrog具有可用性、可復制性、災難恢復能力、可擴展性,以及能與許多本地和云端存儲產(chǎn)品協(xié)同使用。
Sonatype Nexus
Sonatype Nexus是一種資源庫管理器。您可以用它來代理,收集和管理各種依賴項,而不必頻繁地處理各種JAR的集合。開發(fā)者可以使用它來配置內(nèi)部版本,將工件(artifacts)發(fā)布到Nexus上,以實現(xiàn)軟件的輕松分發(fā)。
NuGet
NuGet是一種.NET的軟件包管理器。其客戶端工具提供了生成和使用軟件包的功能。軟件包的作者和使用者可以使用NuGet Gallery作為軟件包的集中存儲庫。
測試代碼
測試代碼在DevOps中的重要性體現(xiàn)在如下兩個方面:
- 專注于軟件的內(nèi)部質(zhì)量
- 建立部署artifacts
可用于測試代碼的工具包括:
JUnit
JUnit是Java語言的單元測試框架。Junit源自在SUnit,是測試驅(qū)動式(test-driven)開發(fā)的必備工具。
xUnit.net
開源的xUnit.net是由NUnit的原始作者所編寫出的、基于.NET Framework的、單元測試工具。
Selenium
Selenium是用于測試Web應用程序的一種可移植框架。通過回放工具,測試人員可以用Selenium來編寫各種功能性測試,而無需特意學習某種測試腳本語言。
Jasmine
Jasmine是一種開源的JavaScript測試框架。憑借著易讀的語法,它可以在任何支持JavaScript的平臺上運行,而不限于應用程序或IDE。您可以在該平臺上運行諸如:Screw.Unit、JSSpec、JSpec、以及RSpec等單元測試框架。
Cucumber
Cucumber是一種支持行為驅(qū)動開發(fā)(behavior-driven development)的軟件工具。它通過普通語言(ordinary-language)解析器—Gherkin,讓用戶使用易于理解的邏輯語言,來指定預期的軟件行為。
持續(xù)集成(CI)
CI在DevOps中的重要性體現(xiàn)在如下兩個方面:
- 提供快速反饋
- 減少缺陷和等待
可用于CI的工具包括:
Jenkins
Jenkins是一種免費開源的自動化服務器,可以在servlet容器(如Apache Tomcat)中運行。Jenkins通過CI與CD的相關技術,實現(xiàn)了軟件開發(fā)過程中的自動化。
CircleCI
CircleCI既可謂世界上最大的分享類CI/CD平臺,又是代碼從構(gòu)想到交付的中央hub。作為最常用的DevOps工具之一,CircleCI每天可處理超過100萬個構(gòu)建數(shù)據(jù)。您可以通過它來獲悉工程團隊是如何工作,代碼是如何運行的。像Spotify、Coinbase、Stitch Fix和BuzzFeed之類的公司,都使用CircleCI來提高工程團隊的生產(chǎn)力,發(fā)布更好的產(chǎn)品,并加快發(fā)布速度。
Travis CI
Travis CI是一項托管式的CI服務,可用于構(gòu)建和測試GitHub上托管的軟件項目。Travis CI為私人項目既能提供各種付費計劃,又有開源的免費計劃。此外,TravisPro還能夠為用戶的硬件,提供用于自定義部署的專有版本。
Concourse
Concourse是由Go編寫的自動化系統(tǒng)。在CI/CD中,用戶可以通過Concourse構(gòu)建出由簡到繁的、可任意擴展的自動化管道。
AWS CodePipeline
AWS CodePipeline是一項完全托管式的CD服務,可以幫助您自動化發(fā)布管道,以實現(xiàn)快速、可靠的應用程序和基礎架構(gòu)的更新。
在更改代碼時,CodePipeline能夠根據(jù)用戶定義的發(fā)布模型,自動化地執(zhí)行構(gòu)建、測試、部署、以及發(fā)布階段,以便用戶快速、可靠地交付出各項新功能和更新。
您也可以輕松地將AWS CodePipeline與第三方服務(例如GitHub)、或自定義的插件相集成。此外,您只支付AWS CodePipeline的使用費用,而無需任何前期或長期的套餐費用。
Azure Pipelines
Azure Pipelines既可以讓用戶獲取適用于Linux、macOS和Windows的云端托管管道,又能夠構(gòu)建各種Web、桌面和移動應用,以及將它們部署到云端或本地。此外,Pipelines還可以為用戶的自動化構(gòu)建和部署節(jié)約更多的時間。
持續(xù)部署(CD)
CD在DevOps中的重要性體現(xiàn)在如下三個方面:
- 優(yōu)化想生產(chǎn)環(huán)境部署的編錄
- 自動化復雜的管道
- 統(tǒng)一團隊,為客戶創(chuàng)造價值
可用于CD的工具包括:
Spinnaker
最初由Netflix開發(fā)的Spinnaker是一個多云的、免費開源CD軟件平臺。用戶可以利用其強大且靈活的管道管理功能,以及與主流云提供商的集成服務,更快、更穩(wěn)健地發(fā)布針對軟件產(chǎn)品的更改。
Octopus Deploy
Octopus Deploy是全球領先的自動化部署與發(fā)布管理工具。作為一個工具集,Octopus可以極大地簡化DevOps流程,以便用戶通過云服務或虛擬機,持續(xù)測試與部署各種微服務或應用。
AWS CodeDeploy
AWS CodeDeploy是一項完全托管式的部署服務。它可以自動將軟件部署到Amazon EC2、AWS Fargate、AWS Lambda、以及本地服務器上,而無需手動操作。
配置管理工具
配置管理在DevOps中的重要性體現(xiàn)在如下兩個方面:
- 加強一致性
- 將基礎架構(gòu)作為代碼
可用于配置管理的工具包括:
Terraform
Terraform是由HashiCorp創(chuàng)建的開源式基礎架構(gòu)即代碼(infrastructure-as-code,IaC)軟件工具。通過使用Hashicorp配置語言、或JSON高級配置語言,用戶可以用它來定義和配置數(shù)據(jù)中心的基礎結(jié)構(gòu)。
BOSH
BOSH是一個對不同類型云服務軟件進行工程發(fā)布、部署和生命周期統(tǒng)一管理的項目。它既可以在數(shù)百個虛擬機(VM)上進行軟件配置和部署,又能夠以最小的停機時間實現(xiàn)故障恢復和軟件更新。
BOSH支持多種基礎架構(gòu)即服務(IaaS)提供商,其中包括:VMware vSphere、Google Cloud Platform、Amazon Web Services EC2、Microsoft Azure、OpenStack和阿里云。此外,BOSH還提供了一種云服務商接口(Cloud Provider Interface,CPI),可方便用戶通過擴展BOSH,來支持諸如Apache CloudStack和VirtualBox等IaaS應用。
Chef
作為一種配置管理工具,Chef能夠處置物理服務器、虛擬機和云端主機的各種設置。像Facebook、Etsy、Cheezburger和Indiegogo之類的公司,都在使用Chef軟件來控制和管理其基礎架構(gòu)。此外,作為DevOps運動的創(chuàng)始者,Chef不斷踐行著數(shù)字化轉(zhuǎn)型、持續(xù)自動化、以及快速交付。
Ansible
Ansible是一種開源的軟件采購、配置管理和應用部署的工具。它可以被配置在各種Unix發(fā)行版、以及Windows上。Ansible可以通過自帶的描述性語言,來定義系統(tǒng)的相關配置。
Puppet
Puppet提供了一種定義系統(tǒng)所需的軟件配置,并具有保持指定狀態(tài)的能力。您可以使用類似于Ruby的聲明性域特定語言(declarative domain-specific language,DSL),來定義特定環(huán)境或架構(gòu)的配置參數(shù)。Puppet使用自帶的Facter程序來發(fā)現(xiàn)系統(tǒng)信息。它通過使用清單(manifests),來管理其控制的所有節(jié)點上的重要配置信息。其主控節(jié)點是那些已安裝了Puppet,并運行著Puppet代理(即守護程序)的節(jié)點。代理收集到相關節(jié)點的配置信息后,會發(fā)送給Puppet主服務器。然后,Puppet的主節(jié)點會據(jù)此來進行編錄,以便讓每個節(jié)點都能更新配置,并保持一致。
此外,Puppet主要是通過拉取的模式(pull mode),定期輪詢主服務器,來檢索特定站點和節(jié)點的配置。在該結(jié)構(gòu)中,受管理的節(jié)點運行著作為后臺服務的Puppet代理應用。
Google Cloud Deployment Manager
作為一項基礎架構(gòu)的管理服務,Google Cloud Deployment Manager可以輕松地創(chuàng)建、部署和管理Google云平臺的相關資源。
監(jiān)控和記錄工具
監(jiān)控和記錄在DevOps中的重要性體現(xiàn)在如下四個方面:
- 快速恢復
- 反應能力
- 透明度
- 事故期間人員參與度
可用于配置管理的工具包括:
ELK Stack
ELK Stack是Elasticsearch、Logstash和Kibana三個開源產(chǎn)品的集合。它們都是由Elastic公司開發(fā)、管理和維護的。
- E代表ElasticSearch – 可用于存儲日志
- L代表Logstash – 可用于傳輸、處理和存儲日志
- K代表Kibana – 能夠提供Web界面的可視化工具
Datadog
Datadog是針對云規(guī)模(cloud-scale)應用的監(jiān)控服務。它可以通過基于SaaS的數(shù)據(jù)分析平臺,來監(jiān)控服務器、數(shù)據(jù)庫、以及各項工具與服務。
Datadog應用性能監(jiān)控(Application Performance Monitoring,APM)可以對日志和基礎架構(gòu)進行監(jiān)控。通過監(jiān)控諸如:請求量和延遲之類的關鍵指標,以及跟蹤詳細的單個請求,Datadog能夠自動生成針對應用的儀表板。
當有請求被發(fā)往到某個應用時,Datadog會通過查看和跟蹤整個分布式系統(tǒng)的狀態(tài),以顯示與該請求相關的系統(tǒng)數(shù)據(jù)。
New Relic
New Relic是一家位于加州舊金山的技術公司。它致力于開發(fā)基于云服務的軟件,以幫助網(wǎng)站和應用所有者跟蹤其服務性能。
New Relic的應用性能監(jiān)控(APM)產(chǎn)品,可以提供有關Web應用的性能,以及最終用戶滿意度的實時趨勢數(shù)據(jù)。
Prometheus
Prometheus是用于事件監(jiān)控和警報的免費軟件應用。它將受監(jiān)控指標的實時數(shù)據(jù),記錄在一個時序數(shù)據(jù)庫中。該數(shù)據(jù)庫構(gòu)建在具有靈活查詢和實時警報功能的HTTP拉取式模型上。也就是說:Prometheus服務器事先配置各個受監(jiān)控節(jié)點的指標,然后定期收集相關數(shù)據(jù),并將其存儲在本地。
Zipkin
Zipkin是一個分布式跟蹤系統(tǒng)。它能夠為用戶按需查找與收集時序數(shù)據(jù),并協(xié)助解決服務架構(gòu)中的延遲問題。
如果日志文件中已有跟蹤ID,那么它會直接跳轉(zhuǎn)至該ID處。否則,您需要基于服務、操作名稱、標簽(tagsm)、以及持續(xù)時間等屬性,進行查詢。例如,您可以查詢某項請求在服務中花費的時間百分比,以及對應的操作是否成功。
Azure Monitor
Azure Monitor通過提供一個全面的解決方案,從目標云端和本地環(huán)境中收集、分析和執(zhí)行遙測(telemetry),進而最大程度地提高應用與服務的可用性與性能。據(jù)此,它可以協(xié)助用戶主動地識別出相關問題,以及所依賴的資源。您往往可以使用Azure Monitor來達到如下目的:
- 使用Application Insights,來檢測和診斷跨應用與依賴項的問題。
- 將基礎架構(gòu)問題與適用于VM的Azure Monitor、以及適用于容器的Azure Monitor相關聯(lián)。
- 使用Log Analytics攫取監(jiān)控數(shù)據(jù),以便進行故障排除和深度診斷。
- 通過智能警報和自動化操作,來全面支持運營。
- 可使用Azure儀表板和工作簿(workbooks),來實現(xiàn)可視化。
交流工具
交流在DevOps中的重要性體現(xiàn)在如下三個方面:
- 連接團隊
- 減少等待
- 改善協(xié)作
可用于交流的工具包括:
Slack
Slack是一個專用的即時消息平臺。它旨在為用戶公司取代電子郵件,這種傳統(tǒng)的信息交流與共享方法。通過Slack您可以按照不同的“頻道”,進行組織交流或小組討論。當然,你也可以私密的方式進行信息和文件的共享操作。
Microsoft Teams
Microsoft Teams是一個統(tǒng)一化的通信和協(xié)作平臺。它集成了實時聊天、視頻會議、文件存儲、以及協(xié)作應用等功能。
作為基于聊天場景的協(xié)作工具,Teams可為全球、遠程和分散的團隊,提供了共享信息的能力。此外,它還帶有諸如:文檔協(xié)作、一對一聊天、團隊交流等酷炫的功能。
Google Hangouts
Google Hangouts是Google開發(fā)的一種通訊軟件。組織內(nèi)的成員可以用它來有效地向一到多個同事發(fā)送消息,與多人持續(xù)進行對話,并使用機器人(bots)來自動化各項工作。此外,您可以在電腦的瀏覽器,以及Android和iOS的移動應用中使用它。
Zoom
Zoom Video Communications提供了視頻會議、在線會議、聊天和移動協(xié)作等遠程服務。同時,它是那些需要經(jīng)常開展視頻培訓團隊的首選。
知識共享工具
知識共享在DevOps中的重要性體現(xiàn)在如下三個方面:
- 減少認知上的不對稱
- 提高新員工的生產(chǎn)力
- 避免已知錯誤的重現(xiàn)
可用于知識共享的工具包括:
GitHub Pages
GitHub Pages是一種靜態(tài)站點的托管服務。它既可以直接從GitHub的存儲庫中,獲取HTML、CSS和JavaScript文件,又能夠在構(gòu)建過程中將這些文件發(fā)布到網(wǎng)站上。此外,GitHub Pages提供了各種網(wǎng)站的示例,可供用戶參考。
Confluence
Confluence是由Atlassian用Java編程語言編寫、開發(fā)并發(fā)布的一款協(xié)作軟件。作為一款協(xié)作類Wiki工具,Confluence可以幫助團隊有效地進行協(xié)作和知識共享。例如,您可以在“團隊日歷(Team Calendars)”插件的幫助下,捕獲項目需求,向特定用戶分配任務,以及一次性管理多個日歷。
Jekyll
Jekyll是由GitHub的聯(lián)合創(chuàng)始人Tom Preston-Werner用Ruby編寫而成,并根據(jù)開源的MIT許可進行發(fā)行。它是一個簡單的、博客感知(blog-aware)的靜態(tài)站點生成器。也就是說,作為一個解析引擎,它能夠從諸如:模板、部分代碼、以及液態(tài)代碼(liquid code)等動態(tài)組件中,構(gòu)建出靜態(tài)網(wǎng)站。
Google Sites
Google Sites是由Google提供的結(jié)構(gòu)化Wiki與網(wǎng)頁創(chuàng)建類工具。它的目標是讓任何人在無需學習設計與編程的前提下,能夠創(chuàng)建出方便與他人協(xié)作的,簡單且高質(zhì)量的網(wǎng)站。而且此類網(wǎng)站可以在臺式機、智能手機等不同的屏幕上被輕松地訪問到。
總結(jié)
DevOps是一種令人興奮的工作方式。就目前而言,它能夠讓團隊成員在保證持續(xù)交付的同時,充分專注客戶的需求和產(chǎn)品的質(zhì)量,進而讓軟件公司在技術水平上能夠脫穎而出。希望上述介紹的不同DevOps工具類別,能夠?qū)δ腄evOps實踐提供幫助。
【原標題】The DevOps Toolchain ,作者: Suresh Sekar
【51CTO譯稿,合作站點轉(zhuǎn)載請注明原文譯者和出處為51CTO.com】