2021 年 25 大 DevOps 工具(上)

陳琦聊測試發表於2021-12-15

DevOps 正在改變全球軟體開發的狀態,DevOps 正以某種形式有效地提高提高全球軟體公司的上市速度、可銷售性、創新和產品質量。
2021 年是 DevOps 的重要一年。由於 DevOps 跨越開發、運營、IT、安全和產品團隊等等,以及軟體開發的不同階段,因此有大量工具可供選擇。
本文介紹目前市場上可用的一些頂級 DevOps 工具,同時牢記 CI/CD 生命週期的重要類別。本篇為配置管理、構建、原始碼、部署工具,下篇主要是漏洞管理、質量、監控、協作工具。

配置管理

Puppet


Puppet 是一種開源軟體配置管理和部署工具,通常用於確保所有伺服器都配置為所需的狀態。Puppet 是基於代理的,最常用於 Linux 和 Windows 同時控制多個應用程式伺服器。Puppet 主要用於客戶端/伺服器配置,其中受管節點與伺服器的配置保持同步。藉助 Puppet 的程式碼管理工具 R10K,可以更輕鬆地對 CI/CD 程式碼實施自動化或手動更改、更新、審查和測試。還可以使用 R10K 和 Puppetfiles 來自動部署環境。這些基於代理的部署一般比較準確、及時,還能生成錯誤日誌以供審查。
Puppet 還為版本控制提供了與 Git 的簡單整合。
Puppet是宣告式的,通常適合基線而非編制。
Puppet缺點:

  • 總體速度緩慢
  • 在不編寫自定義事實的情況下,Puppet 無法檢查 exec 資源之外的系統狀態
  • Hiera是Puppet的鍵值配置資料查詢系統,速度慢且排查故障困難

Ansible

Ansible 是開源配置管理和編排工具,以其簡潔和效能而聞名。Ansible 在主機上執行並使用 SSH 連線到節點。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 缺點:

  • 系統規模及擴充套件緩慢
  • 缺乏 Windows 系統的支援
  • 當數百個伺服器需要數百個大規模同步時效率低下

Chef


Chef 是主要用於配置管理的開源 DevOps 工具。Chef 也基於主代理模型,因為 Chef 客戶端在每臺客戶端機器上執行(使用“knife”工具並透過 SSH 進行通訊)。Chef 與 Puppet 的不同之處在於它的額外層,稱為工作站,其中包含所有配置。這些配置首先在本地機器上自動測試,然後推送到伺服器上。

當存在主機依賴關係時,Chef 的表現非常出色。它能獲取系統的狀態(包、現有使用者、目錄等),並將它們與代理的實時例項進行比較,並確保物件保持同步。
在業界廣為人知的是,Chef 使用 AWS OpsWorks 等服務維護更大網路的自動化功能。Chef Inspec 還有助於確保網路部署的安全性和完整性。Chef InSpec 是一個開源框架,允許對應用程式進行自動、手動測試和審計。
儘管 Chef 具有強大的 GUI,但必須瞭解 Ruby 才能利用 Chef 的基礎架構即程式碼模型的真正力量,尤其是涉及複雜任務和自定義時。可以透過在 Chef 中編寫指令碼(被稱為烹飪書和菜譜)來實現大量自定義,但在許多情況下這樣做並不是最佳選擇。
Chef 缺點:

  • 代理例項需要定檢視主機來安裝更新
  • 初學者難以理解
  • 缺乏詳細的檔案
  • 缺乏需求的可擴充套件性

構建

Jenkins


Jenkins 是用 Java 編寫的開源自動化服務,它充當 CI(持續整合)工具,使開發人員可以更輕鬆地將新元件整合到軟體中,以實現無縫整合。Jenkins 使用外掛進行整合來實現這一目標。
Jenkins 聽取新的拉取請求,將新的工作分支合併到主程式碼中,執行自動化測試套件,生成新的測試資料,報告失敗,並將最新的程式碼更改部署到 QA 環境以進行手動測試。
Jenkins Pipeline 用於實現持續整合過程的自動化表達。可以在管道中定義構建檔案,將它們載入到 SCM 並配置工作變數。
Jenkins 已經存在了很長時間,並且由於其成熟的生態系統、外掛支援、文件和社群,實際上已經成為一種標準。Jenkins 在過去幾年中有幾次更新。它已成為許多公司的首選之一,因為它為管道和 Docker 整合提供了簡單的 UX/語法。
Jenkins的缺點包括:  

  • 要使用 Jenkins,需要先學 Groovy,它因其不一致性而臭名昭著。Jenkins 中的 Groovy 指令碼不易編寫和編輯,尤其是要大量地更改時。
  • 在許多情況下,還需要手動將構建配置到UI、硬程式碼配置檔案和鬆散的訪問控制中。
  • 如果沒有 JenkinsFile,Jenkins 極難使用,JenkinsFile 是一個文字檔案,包含 Jenkins Pipeline 的定義,且該檔案由原始碼控制。

TeamCity

TeamCity 是一款高階 CI 工具(提供受限的免費版本),以其易於操作的介面、流暢的配置和創新功能而聞名。TeamCity 在 Java 環境和 Apache Tomcat 伺服器中執行,但也可以安裝在 Windows 和 Linux 伺服器上。
是否選擇TeamCity 在很大程度上取決於自身需求。如果有充足預算,且主要任務包括設定固定數量的構建代理,以便用儲存庫快照和工件依賴項輕鬆建立並行構建鏈,那TeamCity 將非常合適。TeamCity 也有非常可靠的文件。TeamCity 的“Snapshot Dependencies”功能允許你在整個管道中保持相同的源版本,而無需底層程式碼實現。
但是,TeamCity 會自動修復snowflake agents,為此,必須使用配置工具或容器技術。
TeamCity 基於模板的構建配置可以讓生活更輕加松。

TeamCity 還原生支援 AWS、GCE 和 Azure 中的代理自動擴充套件。它還透過外掛支援 VMware 和 Kubernetes,並與 GitHub 本地整合。


TeamCity 缺點:

  • 價格昂貴
  • 除錯日誌和錯誤日誌難以解析和理解

Bamboo

Bamboo 是由 Atlassian 開發的持續整合和持續部署伺服器。Bamboo 的主要優勢之一是它能夠在單個工作流中將自動化構建、測試和釋出與其他 Atlassian 產品(例如 JIRA、BitBucket、Stash、Hipchat 和 Confluence)整合,從而建立一個穩固的軟體開發和交付生態系統。
Bamboo 還具有可靠、易於使用的 GUI。
與 BitBucket、Confluence 和 Jira 的輕鬆整合是 Bamboo 的一大優勢。它還可以啟動類似 cron 的觸發器,如果員工不在辦公室,但有稽核分析、自動化測試和自動化程式要執行,這些觸發器會派上用場。
Bamboo 缺點:

  • Bamboo的程式碼分析能力不強
  • Bamboo 無法集中構建配置
  • 沒有全域性工具配置(必須在代理器上手動安裝工具)
  • Bamboo 缺乏憑據外掛和支援,這意味著每個 Bamboo 相關的專案都必須推出密碼更改功能

原始碼管理

GitHub

GitHub 是全球數百萬人使用的最流行的原始碼管理工具之一。GitHub 的主要優勢包括:易操作的 UI、智慧功能如意外刪除的儲存庫恢復功能、 防止成品刪除、整合多樣化和安全性。GitHub 幾乎沒有中斷或停機,這使得它非常可靠。
GitHub 擁有龐大的社群,非常適合開源專案。由於 Microsoft 擁有 GitHub,所以 Azure DevOps 和Microsoft的工具可以進行緊密整合。GitHub 讓你能更好地控制 CI/CD 過程。
但是,GitHub 只為每個儲存庫最多3個協作者提供免費的私人儲存庫。

GitLab

GitLab 基於 Git,為軟體開發提供版本控制、CI 服務、部署和管道功能。由於其強大的 CI 服務,大多數公司更喜歡使用 GitLab 進行原始碼管理。如果你想在自己的伺服器上整合 CI/CD,GitLab 是一個可行方法,因為你其實可以在伺服器上託管 GitLab。GitLab 免費且開源,並提供無限數量的免費私人儲存庫。
GitLab 還允許你安裝私有例項,還提供容器註冊服務。

部署

Spinnaker

Spinnaker 是一個開源 CD 軟體平臺,可與 Kubernetes、Google Cloud Platform、AWS、Microsoft Azure 和 Oracle Cloud 配合使用。它主要是一個部署和交付平臺,用於獲取工件並將其部署到生產中。
Spinnaker 的儀表板和介面都非常易於使用。開發人員可以輕鬆地將他們的程式碼推送到釋出分支,該工具會自動構建、測試、驗證並將程式碼推送到生產環境。藉助 Spinnaker,你可以使用 Seamless Kubernetes、 Github 和 Google 的雲構建整合,輕鬆交付、部署對軟體的更改。
Spinnaker 可以本地構建 EC2 AMI、配置 ASG 和設定負載均衡器。
Spinnaker 缺點:

  • 缺乏有效的可擴充套件性
  • 檔案稀缺
  • 自動化任務困難

Octopus Deploy

Octopus Deploy 是一個用於自動化部署的 CD 工具。它可以在代理機器或“觸手”上自動部署應用程式和服務。Octopus Deploy 適用於 ASP.NET Web 應用程式、Java 應用程式、NodeJS 應用程式,並將自定義指令碼執行到多種環境,包括 AWS 和 Azure。大多數情況下,它與 AzureDevOps 一起使用,並受到使用 Microsoft 生態系統的公司的青睞。
Octopus Deploy 可以整合流水線的 CI 基礎設施。可以向 Octopus 發起 API 呼叫,以建立新版本,並透過CI管道推送二進位制檔案。
Octopus的缺點如下:

  • 價格昂貴
  • 無法在專案之間匯出變數

Argo CD

Argo CD 是一個宣告式的 GitOps 持續部署工具,主要用於 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。

眾多的可用工具可能令人望而生畏,但選擇本身是一件好事。缺乏標準化和自動化可能會在入職或交接過程中產生極高的學習曲線。選擇原則是不要投資於相似、重疊的工具而浪費時間和財務資源。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69978795/viewspace-2847901/,如需轉載,請註明出處,否則將追究法律責任。

相關文章