2021 年 25 大 DevOps 工具(上)

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。

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章