成功實施DevOps計劃的12種工具
譯文【51CTO.com快譯】眾所周知,DevOps是一個軟件開發(fā)與交付的過程。它可以協(xié)助強調(diào)產(chǎn)品管理、軟件開發(fā)和運營專業(yè)人員之間的溝通、以及跨職能的協(xié)作。
我們根據(jù)以往數(shù)十年在IT行業(yè),特別是基礎(chǔ)架構(gòu)方面積累的經(jīng)驗,精心挑選了十二種DevOps工具,為您進行功能性的介紹。同時,我們還將和您討論DevOps的轉(zhuǎn)型路線圖,以及分步實施的相關(guān)指南。
由于DevOps的主要目標是為了改善各個利益相關(guān)者之間的協(xié)作狀態(tài),因此從規(guī)劃、部署到IT項目的運維,它能夠?qū)崿F(xiàn):
- 提高部署的頻率。
- 減少更新/修復(fù)之間的時間。
- 實現(xiàn)快速的交付。
- 縮短恢復(fù)的時間。
- 降低新版本的失敗率。
DevOps轉(zhuǎn)型路線圖
根據(jù)軟件開發(fā)的生命周期,DevOps的實施方法一般分為如下三個主要階段:
- 構(gòu)建(DevOps持續(xù)集成)。
- 測試(DevOps持續(xù)測試)。
- 發(fā)布(DevOps持續(xù)交付)。
DevOps的主要重點在于:通過簡化交付流程和標準化開發(fā)環(huán)境,以提高交付的效率、安全性和可預(yù)測性。DevOps賦予了整個團隊構(gòu)建、交付、驗證和支持其軟件應(yīng)用的自主權(quán)。它使得開發(fā)人員能夠更好地了解基礎(chǔ)架構(gòu),從而更好地控制整個生產(chǎn)環(huán)境。
在開始DevOps轉(zhuǎn)型之前,企業(yè)首先要定義好現(xiàn)有的業(yè)務(wù)流程、IT基礎(chǔ)架構(gòu)、以及交付的管道;然后通過制定明確的目標,讓DevOps的實施策略真正能夠在本企業(yè)落地。
盡管在不同的企業(yè)中,實現(xiàn)DevOps的方式有所不同,但是與DevOps相關(guān)的流程通常會包括如下6個C的階段:
- 持續(xù)開發(fā) – 持續(xù)開發(fā)涉及到計劃、概述和引入新的代碼。持續(xù)開發(fā)的目的是:優(yōu)化代碼的構(gòu)建過程,并減少開發(fā)和部署之間的用時。
- 持續(xù)集成(CI) – DevOps實施的實踐涉及到將開發(fā)的代碼集成到中央存儲庫之中。在該存儲庫中,配置管理(CM)工具與測試開發(fā)工具相集成,以跟蹤代碼的開發(fā)狀態(tài)。此外,CI還包括在測試和開發(fā)之間形成快速的反饋,以便能夠識別和解決此過程中可能出現(xiàn)的各種代碼問題。
- 持續(xù)測試 – 持續(xù)測試的目的是:加快代碼向生產(chǎn)環(huán)境的交付。DevOps在此階段涉及到更新應(yīng)用程序的代碼,并運行預(yù)定的、自動化的代碼測試。
- 持續(xù)交付 – 持續(xù)交付旨在:快速、持續(xù)地交付那些將在生產(chǎn)環(huán)境中部署的更新和變更。持續(xù)交付可以確保:即使開發(fā)人員持續(xù)進行頻繁的修改,其代碼也能始終處于可部署的狀態(tài)。
- 持續(xù)部署(CD) – 類似于持續(xù)交付,持續(xù)部署就是通過使用各種容器類技術(shù)工具(如:Docker和Kubernetes),自動化地將新的、或修改好的代碼發(fā)布到生產(chǎn)環(huán)境中。在此階段中,維護不同部署環(huán)節(jié)中代碼的一致性,顯得尤為關(guān)鍵。
- 持續(xù)監(jiān)控 – 此階段涉及到對操作代碼、以及支持代碼的基礎(chǔ)架構(gòu)進行持續(xù)的監(jiān)控。同時,我們也需要對生產(chǎn)環(huán)境中與應(yīng)用部署相關(guān)的變更進行持續(xù)監(jiān)控,以確保應(yīng)用的穩(wěn)定性,并具有最佳的性能。
DevOps的優(yōu)勢
企業(yè)實施DevOps,能夠獲得如下主要優(yōu)勢:
- 更好、更快地交付產(chǎn)品。
- 更高級的自動化與可擴展能力。
- 更清晰的系統(tǒng)性結(jié)果。
- 穩(wěn)定的操作環(huán)境。
- 更好地利用資源。
盡管DevOps的概念已經(jīng)存在了十年之久,但是與其他方法類似,它在落地的過程中同樣有一些值得我們注意和避開的坑點??偟恼f來,其特點包括:
a)成本問題
DevOps的實施雖然可以減少項目失敗的可能,以及回滾的次數(shù),進而在長遠的維度上降低IT的總體成本。但是,如果沒有在實施DevOps之前做好適當?shù)囊?guī)劃與預(yù)算,那么您在轉(zhuǎn)型的實踐中可能會讓成本陷入無底洞。
b)技能不足
要想成功地采用DevOps,企業(yè)往往需要聘請合格的DevOps專業(yè)人員。這些DevOps顧問往往能夠熟練地管理團隊,并建立協(xié)作的文化氛圍。
c)復(fù)雜的基礎(chǔ)架構(gòu)
基礎(chǔ)架構(gòu)的復(fù)雜性是成功實施DevOps的另一挑戰(zhàn)。企業(yè)會逐漸發(fā)現(xiàn)那些在孤立環(huán)境中部署出的不同服務(wù),很難被集成到通用的基礎(chǔ)架構(gòu)中,進而創(chuàng)建新的應(yīng)用程序。企業(yè)需要對DevOps團隊進行培訓,以了解組織轉(zhuǎn)型的目標,以及計劃實施的路線,并由資深DevOps顧問來管理好復(fù)雜的基礎(chǔ)架構(gòu)轉(zhuǎn)換。
DevOps實施–分步指南
1.建立一支勝任的DevOps團隊
通常,在遷移到任何新的技術(shù)之前,我們首先需要正確地識別資源,并組建一支足以勝任IT項目各項挑戰(zhàn)的團隊。那么DevOps團隊成員的基本素質(zhì)就應(yīng)當包括:找到問題根源的批判性思維,熟練使用最新DevOps工具和熱衷于學習此類新工具的能力,以及能夠進行故障排除和實驗性解決問題的能力等。只有組建一支勝任的團隊,企業(yè)才能夠按需整理需求,計劃實施路徑,部署軟件,并最終實現(xiàn)完美的軟件交付。
2.制定可靠的DevOps策略
基于如下六個方面的參數(shù),實施DevOps策略:
- 快速執(zhí)行 - 任何組織計劃的最終目標都是為了:在不斷創(chuàng)新的基礎(chǔ)上,實現(xiàn)更快速度的執(zhí)行,以提高客戶的滿意度。那么,DevOps實踐環(huán)節(jié)中的持續(xù)部署,就能夠確保交付的準確性和速度。
- 可擴展性 – 基礎(chǔ)架構(gòu)即代碼(Infrastructure-as-code,https://dzone.com/articles/why-use-infrastructure-as-code-and-how-to-be-succe)的實踐能夠協(xié)助在軟件產(chǎn)品生命周期的各個階段(包括開發(fā)、測試和產(chǎn)品交付),進行可擴展式的精確管理。這對于DevOps的成功實施是至關(guān)重要的。
- 可靠性 – DevOps的持續(xù)集成、持續(xù)測試和持續(xù)交付等實踐,能夠通過確保安全和高質(zhì)量的輸出,來提供良好的最終用戶體驗,以及操作上的可靠性。
- 協(xié)作 – 通過有效的跨團隊協(xié)作和溝通,DevOps能夠消除低效的流程、有限的管理時間、以及項目失敗的可能。
- 頻繁交付 – DevOps的持續(xù)交付、集成和部署實踐,可以實現(xiàn)快速的交付周期,縮短實施過程中必要的恢復(fù)時間,從而進一步為創(chuàng)新留出更多的時間。
- 安全性 – 各種自動化的合規(guī)性策略、以及配置管理技術(shù),使得DevOps模型可以通過基礎(chǔ)架構(gòu)即代碼和策略即代碼(policy as code)的實踐,來獲得更大的安全性。
3.從小處做起
我們可以從小規(guī)模的項目開始,然后逐步轉(zhuǎn)移到全方位的DevOps上。通過小規(guī)模的變更,我們可以檢驗對于測試和部署的管理效果。在此基礎(chǔ)上,我們根據(jù)其效果,再決定下一步是否實施組織級別的DevOps。
4.盡可能地自動化
DevOps的基礎(chǔ)源于快速執(zhí)行的能力。通過精心選擇自動化的工具,我們可以避免重復(fù)性的手動交付,實現(xiàn)更快速的流程執(zhí)行,進而節(jié)省項目參與者的時間、精力和整體預(yù)算。
5.準備合適的環(huán)境
準備合適的持續(xù)測試與交付環(huán)境,對于DevOps的成功實施同樣至關(guān)重要。哪怕是對于應(yīng)用程序的細微修改,我們也應(yīng)該準備一個穩(wěn)定的測試與交付環(huán)境,以確保根據(jù)自動化的測試結(jié)果,是否將更改或添加后的代碼快速地部署到生產(chǎn)環(huán)境中。
6.選擇合適的工具并構(gòu)建強大的通用性基礎(chǔ)架構(gòu)
在DevOps的實施過程中,同樣關(guān)鍵步驟是:基于自身特有IT環(huán)境的兼容性,選擇合適的工具,以實現(xiàn)平穩(wěn)的集成。通過合適的工具集,您可以使用自定義的工作流、以及訪問控制,來構(gòu)建出強大的基礎(chǔ)架構(gòu)和流暢的功能集。
DevOps工具鏈
目前,業(yè)界有許多DevOps工具,可以幫助用戶簡化和自動化軟件的交付管道,以及工作流程的不同階段,并最終確保有效的實施。按照如下的生命周期劃分方式,我們在此羅列出每一個階段的DevOps專有工具,供您參考、測試與選擇。
- 計劃:這是定義業(yè)務(wù)價值和需求的重要階段。
- 工具示例 - Git,Jira
- · 編碼:涉及到軟件的設(shè)計,以及代碼創(chuàng)建的詳細過程。
- 工具示例 - Stash,GitHub,GitLab
- · 構(gòu)建:此階段主要是在自動化工具的幫助下,管理各種軟件的構(gòu)建和版本。因此自動化的工具將協(xié)助編譯和打包代碼,以供將來發(fā)布到生產(chǎn)環(huán)境中。
- 工具示例 - Docker,Puppet,Chef,Ansible,Gradle
- · 測試:這是確保代碼質(zhì)量的持續(xù)測試階段。
- 工具示例 - Vagrant,Selenium,JUnit,Codeception,BlazeMeter,TestNG
- · 部署:這是管理、計劃、協(xié)調(diào)、以及將各種產(chǎn)品自動發(fā)布到生產(chǎn)環(huán)境中的階段。
- 工具示例 – Jenkins,Kubernetes,Docker,OpenShift,OpenStack,Jira
- · 監(jiān)視:該階段主要是在生產(chǎn)環(huán)境中識別和收集已發(fā)布的軟件相關(guān)問題與信息。
- 工具示例 - Nagios,Splunk,Slack,New Relic,Datadog,Wireshark
目前,由于沒有哪一種工具可以包括所有的開發(fā)和交付階段,因此我們需要在了解自身流程的基礎(chǔ)上,通過不同的工具來為企業(yè)建立合適的DevOps文化。下面我們來一起討論那些適合于軟件開發(fā)不同階段的12種DevOps工具:
1.Jenkins
Jenkins是在軟件開發(fā)領(lǐng)域廣為采用的一種非常出色的DevOps自動化工具。從本質(zhì)上說,它是一款開源的CI/CD服務(wù)器,可以在交付流程的不同階段實現(xiàn)自動化。憑借著其龐大的插件生態(tài)系統(tǒng)(超過1000個),Jenkins可以與包括Puppet、Docker和Chef在內(nèi)的多種DevOps工具相集成。
Jenkins的特點:
- 可以根據(jù)用戶的個人需要,來設(shè)置和定制CD管道。
- 可以在Windows、Linux和macOS X上運行,因此上手比較容易。
- 能夠以更快的速度迭代和部署新的代碼。
2.Git
Git是一種分布式源代碼管理類(SCM,source code management)DevOps工具,目前正在被廣泛地應(yīng)用于軟件開發(fā)行業(yè)。它既可以使用戶輕松地跟蹤開發(fā)工作的進度,又可以根據(jù)已保存的、不同版本的源代碼,按需恢復(fù)到某一個特定的版本。
Git的特點:
- 作為一款免費的開源工具,它支持簽入、合并、標簽、提交、分支等多種版本控制類型的操作。
- 提供諸如Github或Bitbucket的托管庫,可供最多五名團隊成員免費、且無限地使用。
- 易于學習,可以通過Git將分支源代碼輕松地合并到一起。
3.Nagios
Nagios是最受歡迎的免費開源DevOps監(jiān)視工具之一,它能夠通過實時地監(jiān)控基礎(chǔ)架構(gòu),來輕松地識別各種安全威脅,檢測不同的中斷與錯誤。另外,Nagios也能夠提供圖形化的報告。
Nagios的特點:
- 不但免費開源,而且提供各種附加的組件。
- 簡化了基于代理和無代理,這兩種服務(wù)器的監(jiān)控方法。
- 能夠監(jiān)控Windows、UNIX、Linux和其他Web應(yīng)用程序。
- 提供多種版本的子工具,其中包括:
- Nagios Core – 命令行工具。
- Nagios XI – 基于Web的GUI。
- Log Server – 使用自動化的警報方式來搜索日志數(shù)據(jù)。
- Nagios Fusion – 可用于同時進行多個網(wǎng)絡(luò)的監(jiān)控。
4.Splunk
通過向DevOps團隊提供智能化的操作,Splunk能夠獲取各類實用的機器數(shù)據(jù),進而提高公司的生產(chǎn)力、競爭力和安全性。
Splunk的特點:
- 通過對計算機生成的數(shù)據(jù)進行以數(shù)據(jù)為驅(qū)動的分析,進而提供各種可行性的洞見。
- 能夠針對IT服務(wù)提供更為集中化的視圖。
- 能夠通過快速的檢測模式,來突顯異常和受影響的區(qū)域。
5.Docker
作為在DevOps領(lǐng)域使用最為廣泛的容器化開發(fā)工具,Docker為云服務(wù)原生的、和那些遺留的應(yīng)用,提供了獨立于平臺的集成化容器。它能夠在確保安全性的基礎(chǔ)上,實現(xiàn)敏捷式的操作。
Docker的特點:
- 能夠輕松地實現(xiàn)應(yīng)用程序的自動化部署,并能夠簡化分布式的開發(fā)。
- Google Cloud和AWS均能夠提供對Docker的內(nèi)置支持。
- Docker容器不但能夠支持虛擬機的環(huán)境,并且與平臺無關(guān)。
Kubernetes是大型團隊常用的一款DevOps工具。它能夠基于Docker的容器化,來實現(xiàn)構(gòu)建,并能夠通過邏輯分類對容器進行分組。
Kubernetes的特點:
- 可以通過自動分發(fā),來部署多臺計算機。
- 是第一款容器編排類工具。
- 在簡化大型團隊所開發(fā)的復(fù)雜項目時非常實用。
7.Ansible
由YAML編寫的Ansible,是一款針對無代理設(shè)計的管理和組織工具。DevOps團隊可以使用它來更加輕松地擴展自動化的流程,并提高生產(chǎn)率。
Ansible的特點:
- 基于主從的架構(gòu)。
- 其編排模塊被設(shè)計為Playbook。
- 非常適合管理復(fù)雜的部署,并能夠加快開發(fā)的過程。
8.Vagrant
作為一款流行的DevOps工具,Vagrant可以與其他管理類工具結(jié)合使用,以實現(xiàn)在同一工作流程中創(chuàng)建虛擬機的環(huán)境。如今,許多組織都開始使用Vagrant,來實現(xiàn)向DevOps文化的轉(zhuǎn)換。
Vagrant的特點:
- 可以與包括Windows、Linux和Mac在內(nèi)的不同操作系統(tǒng)一起使用。
- 可以輕松地與Chef、Puppet、Ansible等DevOps工具集成使用。
9.Gradle
Gradle是一款功能極為豐富的DevOps工具。其用戶可以使用C ++、Java和Python等語言來編寫代碼。各大流行的IDE(如:Netbeans、Eclipse和IntelliJ IDEA)都能夠支持它。
Gradle的特點:
- 其核心模型是基于任務(wù)-動作、輸入和輸出的。
- 使用基于Groovy的DSL、以及基于Kotlin的DSL來描述構(gòu)建。
- 其增量式構(gòu)建能夠節(jié)省用戶大量的編譯時間。
10.Chef
Chef是一款比較流行的、基于Ruby的編排管理工具。它主要被用于檢查配置,以及自動化基礎(chǔ)架構(gòu)。
Chef的特點:
- 有助于實現(xiàn)持續(xù)標準化,并能加強配置。
- 通過自動化整個過程,以確保系統(tǒng)配置的正確性。
- 能夠確保配置策略的靈活性、可讀性和可測試性。
11.Worksoft
作為另一種流行的DevOps工具,Worksoft可以為Web和云端應(yīng)用程序提供各種支持。它具有一套完備的生態(tài)系統(tǒng),適用于那些橫跨整個持續(xù)交付流程的各類企業(yè)級應(yīng)用。
Worksoft的特點:
- 能夠?qū)I和端到端的測試,集成到CI的管道中,進而加速整個流程。
- 允許大中型企業(yè)創(chuàng)建基于風險的持續(xù)測試管道。這些管道可以被導入應(yīng)用程序的生產(chǎn)環(huán)境,以實現(xiàn)可擴展性。
- 提供與各種第三方解決方案的集成,以方便用戶選擇適合自身需求的工具,并在整個DevOps的發(fā)布周期中無縫地管理各項任務(wù)。
12.Puppet
Puppet是一款可用于部署、配置和管理服務(wù)器的開源工具。
Puppet的特點:
- 它提供了主從的結(jié)構(gòu)。
- 可以在混合基礎(chǔ)架構(gòu)和應(yīng)用程序中流暢運行。
- 與Windows、Linux和UNIX操作系統(tǒng)相兼容。
由Technavio進行的最新研究(https://www.technavio.com/report/global-it-spending-region-and-industry-devops-platform-market)顯示:從2016年到2020年,全球DevOps市場的復(fù)合年增長率(CAGR,Compound Annual Growth Rate)已高達19%。這足以突顯全球各類企業(yè)對于實施DevOps的熱情。為了確保DevOps流程的成功實施,我們必須制定可靠的DevOps策略,并選擇與現(xiàn)有開發(fā)環(huán)境相匹配的DevOps工具。而面對當前市場上林林總總的DevOps工具,我們逐一進行配置、測試、以及試驗顯然是相當耗費時間的。希望您能夠?qū)⑸鲜鏊信e的12種DevOps工具收入自己的工具譜中,以便按需進行選用。
原文標題:Top 12 DevOps Tools for Your DevOps Implementation Plan,作者:Mitul Makadia
【51CTO譯稿,合作站點轉(zhuǎn)載請注明原文譯者和出處為51CTO.com】