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