DevOps 正在改變全球軟件開發(fā)的狀態(tài)掸茅,DevOps 正以某種形式有效地提高提高全球軟件公司的上市速度骂因、可銷售性方庭、創(chuàng)新和產品質量翩瓜。
2021 年是 DevOps 的重要一年。由于 DevOps 跨越開發(fā)序无、運營验毡、IT、安全和產品團隊等等帝嗡,以及軟件開發(fā)的不同階段晶通,因此有大量工具可供選擇。
本文介紹目前市場上可用的一些頂級 DevOps 工具哟玷,同時牢記 CI/CD 生命周期的重要類別狮辽。本篇為配置管理、構建、源代碼喉脖、部署工具椰苟,下篇主要是漏洞管理、質量动看、監(jiān)控尊剔、協(xié)作工具。
配置管理
Puppet
Puppet 是一種開源軟件配置管理和部署工具菱皆,通常用于確保所有服務器都配置為所需的狀態(tài)。Puppet 是基于代理的挨稿,最常用于 Linux 和 Windows 同時控制多個應用程序服務器仇轻。Puppet 主要用于客戶端/服務器配置,其中受管節(jié)點與服務器的配置保持同步奶甘。借助 Puppet 的代碼管理工具 R10K烂叔,可以更輕松地對 CI/CD 代碼實施自動化或手動更改皆看、更新、審查和測試。還可以使用 R10K 和 Puppetfiles 來自動部署環(huán)境阅悍。這些基于代理的部署一般比較準確、及時渗钉,還能生成錯誤日志以供審查郭厌。
Puppet 還為版本控制提供了與 Git 的簡單集成。
Puppet是聲明式的你踩,通常適合基線而非編制诅岩。
Puppet缺點:
總體速度緩慢
在不編寫自定義事實的情況下,Puppet 無法檢查 exec 資源之外的系統(tǒng)狀態(tài)
Hiera是Puppet的鍵值配置數(shù)據(jù)查找系統(tǒng)带膜,速度慢且排查故障困難
Ansible
Ansible 是開源配置管理和編排工具吩谦,以其簡潔和性能而聞名。Ansible 在主機上運行并使用 SSH 連接到節(jié)點膝藕。Ansible 可以在任何安裝了 Python 2(版本 2.7)或 Python 3(版本 3.5 及更高版本)的主機上運行式廷,包括 Red Hat、Debian芭挽、CentOS滑废、macOS 和 BSD。
Ansible 讓使用 YAML管理配置變得很容易览绿。用 Ansible 做自動化跨平臺任務也很有效策严。還可以使用 Ansible pull模式從特定文件中獲取存儲庫和運行命令。將 Shell 腳本和配置文件轉換為 Ansible Playbooks 或 Roles 也很容易饿敲,且有很多文檔可用妻导。
Ansible 缺點:
系統(tǒng)規(guī)模及擴展緩慢
缺乏 Windows 系統(tǒng)的支持
當數(shù)百個服務器需要數(shù)百個大規(guī)模同步時效率低下
Chef
是主要用于配置管理的開源 DevOps 工具。Chef 也基于主代理模型,因為 Chef
客戶端在每臺客戶端機器上運行(使用“knife”工具并通過 SSH 進行通信)倔韭。Chef 與 Puppet
的不同之處在于它的額外層术浪,稱為工作站,其中包含所有配置寿酌。這些配置首先在本地機器上自動測試胰苏,然后推送到服務器上。
當存在主機依賴關系時醇疼,Chef 的表現(xiàn)非常出色硕并。它能獲取系統(tǒng)的狀態(tài)(包、現(xiàn)有用戶秧荆、目錄等)倔毙,并將它們與代理的實時實例進行比較,并確保對象保持同步乙濒。
在業(yè)界廣為人知的是陕赃,Chef 使用 AWS OpsWorks 等服務維護更大網(wǎng)絡的自動化功能。Chef Inspec 還有助于確保網(wǎng)絡部署的安全性和完整性颁股。Chef InSpec 是一個開源框架么库,允許對應用程序進行自動、手動測試和審計甘有。
盡管 Chef 具有強大的 GUI诉儒,但必須了解 Ruby 才能利用 Chef 的基礎架構即代碼模型的真正力量,尤其是涉及復雜任務和自定義時梧疲≡识茫可以通過在 Chef 中編寫腳本(被稱為烹飪書和菜譜)來實現(xiàn)大量自定義,但在許多情況下這樣做并不是最佳選擇幌氮。
Chef 缺點:
代理實例需要定查看主機來安裝更新
初學者難以理解
缺乏詳細的文件
缺乏需求的可擴展性
構建
Jenkins
Jenkins 是用 Java 編寫的開源自動化服務缭受,它充當 CI(持續(xù)集成)工具,使開發(fā)人員可以更輕松地將新組件集成到軟件中该互,以實現(xiàn)無縫集成米者。Jenkins 使用插件進行集成來實現(xiàn)這一目標。
Jenkins 聽取新的拉取請求宇智,將新的工作分支合并到主代碼中蔓搞,運行自動化測試套件,生成新的測試數(shù)據(jù)随橘,報告失敗喂分,并將最新的代碼更改部署到 QA 環(huán)境以進行手動測試。
Jenkins Pipeline 用于實現(xiàn)持續(xù)集成過程的自動化表達机蔗∑哑恚可以在管道中定義構建文件甘萧,將它們加載到 SCM 并配置工作變量。
Jenkins 已經存在了很長時間梆掸,并且由于其成熟的生態(tài)系統(tǒng)扬卷、插件支持、文檔和社區(qū)酸钦,實際上已經成為一種標準怪得。Jenkins 在過去幾年中有幾次更新。它已成為許多公司的首選之一卑硫,因為它為管道和 Docker 集成提供了簡單的 UX/語法徒恋。
Jenkins的缺點包括:
要使用 Jenkins,需要先學 Groovy欢伏,它因其不一致性而臭名昭著因谎。Jenkins 中的 Groovy 腳本不易編寫和編輯,尤其是要大量地更改時颜懊。
在許多情況下,還需要手動將構建配置到UI风皿、硬代碼配置文件和松散的訪問控制中河爹。
如果沒有 JenkinsFile,Jenkins 極難使用桐款,JenkinsFile 是一個文本文件咸这,包含 Jenkins Pipeline 的定義,且該文件由源代碼控制魔眨。
TeamCity
TeamCity 是一款高級 CI 工具(提供受限的免費版本)媳维,以其易于操作的界面、流暢的配置和創(chuàng)新功能而聞名遏暴。TeamCity 在 Java 環(huán)境和 Apache Tomcat 服務器中運行侄刽,但也可以安裝在 Windows 和 Linux 服務器上。
是否選擇TeamCity 在很大程度上取決于自身需求朋凉。如果有充足預算州丹,且主要任務包括設置固定數(shù)量的構建代理,以便用存儲庫快照和工件依賴項輕松建立并行構建鏈杂彭,那TeamCity 將非常合適墓毒。TeamCity 也有非常可靠的文檔亲怠。TeamCity 的“Snapshot Dependencies”功能允許你在整個管道中保持相同的源版本所计,而無需底層代碼實現(xiàn)。
但是团秽,TeamCity 會自動修復snowflake agents主胧,為此叭首,必須使用配置工具或容器技術。
TeamCity 基于模板的構建配置可以讓生活更輕加松讥裤。
TeamCity 還原生支持 AWS放棒、GCE 和 Azure 中的代理自動擴展。它還通過插件支持 VMware 和 Kubernetes己英,并與 GitHub 本地集成间螟。
TeamCity 缺點:
價格昂貴
調試日志和錯誤日志難以解析和理解
Bamboo
Bamboo 是由 Atlassian 開發(fā)的持續(xù)集成和持續(xù)部署服務器。Bamboo 的主要優(yōu)勢之一是它能夠在單個工作流中將自動化構建损肛、測試和發(fā)布與其他 Atlassian 產品(例如 JIRA厢破、BitBucket、Stash治拿、Hipchat 和 Confluence)集成摩泪,從而創(chuàng)建一個穩(wěn)固的軟件開發(fā)和交付生態(tài)系統(tǒng)。
Bamboo 還具有可靠劫谅、易于使用的 GUI见坑。
與 BitBucket、Confluence 和 Jira 的輕松集成是 Bamboo 的一大優(yōu)勢捏检。它還可以啟動類似 cron 的觸發(fā)器荞驴,如果員工不在辦公室,但有審核分析贯城、自動化測試和自動化程序要運行熊楼,這些觸發(fā)器會派上用場。
Bamboo 缺點:
Bamboo的代碼分析能力不強
Bamboo 無法集中構建配置
沒有全局工具配置(必須在代理器上手動安裝工具)
Bamboo 缺乏憑據(jù)插件和支持能犯,這意味著每個 Bamboo 相關的項目都必須推出密碼更改功能
源代碼管理
GitHub
GitHub 是全球數(shù)百萬人使用的最流行的源代碼管理工具之一鲫骗。GitHub 的主要優(yōu)勢包括:易操作的 UI、智能功能如意外刪除的存儲庫恢復功能踩晶、?防止成品刪除执泰、集成多樣化和安全性。GitHub 幾乎沒有中斷或停機合瓢,這使得它非程菇海可靠。
GitHub 擁有龐大的社區(qū)晴楔,非常適合開源項目顿苇。由于 Microsoft 擁有 GitHub,所以 Azure DevOps 和Microsoft的工具可以進行緊密集成税弃。GitHub 讓你能更好地控制 CI/CD 過程纪岁。
但是,GitHub 只為每個存儲庫最多3個協(xié)作者提供免費的私人存儲庫则果。
GitLab
GitLab 基于 Git幔翰,為軟件開發(fā)提供版本控制漩氨、CI 服務、部署和管道功能遗增。由于其強大的 CI 服務叫惊,大多數(shù)公司更喜歡使用 GitLab 進行源代碼管理。如果你想在自己的服務器上集成 CI/CD做修,GitLab 是一個可行方法霍狰,因為你其實可以在服務器上托管 GitLab。GitLab 免費且開源饰及,并提供無限數(shù)量的免費私人存儲庫蔗坯。
GitLab 還允許你安裝私有實例,還提供容器注冊服務燎含。
部署
Spinnaker
Spinnaker 是一個開源 CD 軟件平臺宾濒,可與 Kubernetes、Google Cloud Platform屏箍、AWS绘梦、Microsoft Azure 和 Oracle Cloud 配合使用。它主要是一個部署和交付平臺赴魁,用于獲取工件并將其部署到生產中谚咬。
Spinnaker 的儀表板和界面都非常易于使用。開發(fā)人員可以輕松地將他們的代碼推送到發(fā)布分支尚粘,該工具會自動構建、測試敲长、驗證并將代碼推送到生產環(huán)境郎嫁。借助 Spinnaker,你可以使用 Seamless Kubernetes祈噪、 Github 和 Google 的云構建集成泽铛,輕松交付、部署對軟件的更改辑鲤。
Spinnaker 可以本地構建 EC2 AMI盔腔、配置 ASG 和設置負載均衡器。
Spinnaker 缺點:
缺乏有效的可擴展性
文件稀缺
自動化任務困難
Octopus Deploy
Octopus Deploy 是一個用于自動化部署的 CD 工具月褥。它可以在代理機器或“觸手”上自動部署應用程序和服務弛随。Octopus Deploy 適用于 ASP.NET Web 應用程序、Java 應用程序宁赤、NodeJS 應用程序舀透,并將自定義腳本運行到多種環(huán)境,包括 AWS 和 Azure决左。大多數(shù)情況下愕够,它與 AzureDevOps 一起使用走贪,并受到使用 Microsoft 生態(tài)系統(tǒng)的公司的青睞。
Octopus Deploy 可以集成流水線的 CI 基礎設施惑芭∽菇疲可以向 Octopus 發(fā)起 API 調用,以創(chuàng)建新版本遂跟,并通過CI管道推送二進制文件逃沿。
Octopus的缺點如下:
價格昂貴
無法在項目之間導出變量
Argo CD
Argo CD 是一個聲明式的 GitOps 持續(xù)部署工具,主要用于 Kubernetes 集群中部署應用程序漩勤。
Argo CD 強制同步 Kubernetes 清單感挥,這些清單在 Git 存儲庫中記錄你的應用程序。Argo CD 可以自動應用已更新的清單以提交對集群的更改越败。ArgoCD 服務器可以跟蹤主項目的部署分支触幼。Argo CD 還可以自動檢測何時將構建分支合并到部署分支中。Argo CD 通過首先部署新版本的清單來防止停機究飞。
Argo CD 缺點:
Argo CD 不支持 CI置谦,這意味著如果你想要一個完整的 CI/CD 管道,那就需要借助其他工具亿傅,如 Jenkins媒峡、Travis、Circle CI 或 Gitlab CI葵擎。
眾多的可用工具可能令人望而生畏谅阿,但選擇本身是一件好事。缺乏標準化和自動化可能會在入職或交接過程中產生極高的學習曲線酬滤。選擇原則是不要投資于相似签餐、重疊的工具而浪費時間和財務資源。