極狐GitLab、GitLab、GitHub、Gitee 都是市面上常見的與代碼托管有關的平臺,但是這四種產品還是有所差異的。下面會做一個對比分析。
極狐GitLab:是一個一體化的 DevOps 平臺。關于極狐GitLab 和 GitLab 的關系,可以查看為什么選擇極狐GitLab?中極狐GitLab 與 GitLab 的協作模式章節。
GitLab:是一個一體化的 DevOps 平臺。提供覆蓋軟件全開發生命周期的管理功能。提高企業 DevOps 能力。
GitHub:是一個開發者平臺。目前是開源項目的主要集散地。
Gitee:是一個代碼托管平臺。
GitLab 是采取“核心開放”的開源模式(即核心代碼開源,企業版代碼源碼可見),采用的是 MIT license ;極狐GitLab 和 GitLab 采取同樣的核心開放模式,但是使用的是極狐 license,詳細內容可以查看關于極狐GitLab版本說明中許可證模式章節。 GitHub 和 Gitee 是代碼托管平臺,但本身產品是閉源的。
極狐GitLab、GitLab、GitHub 都有很完整、詳細的文檔,能夠幫助用戶快速理解、使用產品。而 Gitee 的完備情況不如前述的三種產品,僅有部分幫助文檔。
文檔的完備是一個優秀的項目或者產品的必備因素。
GitLab 和 極狐GitLab 都支持私有化部署,用戶可以在各自的官方下載頁面下載安裝包,安裝部署即可完成私有化部署。這也是極狐GitLab 和 GitLab 受用戶歡迎的重要原因之一。而 GitHub 和 Gitee 不支持私有化部署。
極狐GitLab/GitLab 的私有部署可以通過多種方式來實現,比如通過安裝包(針對不同系統,如 Debian、Ubuntu、CentOS)、docker、Helm Chart等方式進行。安裝也非常簡單,“一鍵式”即可完成。詳細的安裝指導可以查看極狐GitLab 官網安裝教程。
上述的私有化部署指真正的私有化部署,也就是說用戶可以在不借助產品團隊的指導或者特性化開發的前提下完成自主私有化部署。
極狐GitLab/GitLab 的 Geo 是一種高可用架構,能夠在多地域部署(尤其符合現在常見的兩地三中心場景)。Geo 有兩個實例,主實例 primary 和第二實例 secondary。通過 Geo 可以提升極狐GitLab/GitLab 實例的高可用性,當主實例出現問題的時候,第二個實例可以切換過來當作主實例用,不會導致服務不可用。Geo 還有其他很多功能,諸如在兩個實例之間實現負載均衡;讓只讀操作在第二個實例進行,寫操作在主實例進行,這樣能夠提升代碼的上傳、拉去等效率,同時不影響團隊成員通過極狐GitLab/GitLab 來進行協作;還可以為其他區域”研發中心“就某些操作(諸如拉取或克?。┨峁┚徒铀僭L問,極大的提升效率。Geo 是極狐GitLab/GitLab 一個非常重要,也是被眾多企業用戶看重的特性。私有部署配合 Geo 就能夠打造高可用的自建極狐GitLab/GitLab 平臺來供團隊使用了。
GitHub 也有高可用服務,但是卻不支持私有部署,對于用戶來說意義不大,只需要 GitHub 自身保持足夠的高可用性即可。對于 Gitee 目前沒看到提供有類似的服務,加之 Gitee 和 GitHub 一樣,不支持私有部署,所以在高可用 & 多地域部署上,極狐GitLab/GitLab 利用其 Geo 獲得了用戶和市場的認可。
由于極狐GitLab 可以理解為 GitLab 在國內的發行版,所以從 GitLab 向極狐GitLab 的遷移是百分百可行且非常平滑,極狐GitLab 的支持團隊擁有豐富的經驗完成這種遷移。而對于 GitLab 向 GitHub 或 Gitee 的遷移都是需要花費一番功夫的。
極狐GitLab 和 GitLab 具有項目管理功能——利用自身的一些功能特性實現,諸如 Epic、Board、Roadmap、Milestone 等,能夠展示出當前項目的進展情況,方便及時發現瓶頸點。GitHub、Gitee 則沒有類似的功能。
極狐GitLab 和 GitLab 均提供開箱即用的鏡像倉庫服務,倉庫使用方式比較靈活而且 API 豐富,能夠滿足用戶的多種需求。關于極狐GitLab 的鏡像倉庫使用可以參考博客極狐GitLab 鏡像倉庫的使用技巧。此外,極狐GitLab、GitLab 還內置 Package Registry,同時支持 maven、npm、Helm 等多種包的存儲。GitHub 在 2019 年也推出了 Packages 的服務,用于為用戶提供 Container Registry & Package 服務。GitHub 也提供鏡像和包管理功能,使用方法和極狐GitLab/GitLab 的類似。但是Gitee 目前為止還沒有提供類似的服務,如果用戶需要存儲鏡像,則需要借助第三方鏡像倉庫服務。
鏡像在云原生時代扮演著重要的角色,其存儲對于整個軟件開發生命周期和軟件供應鏈安全都是非常重要的。鏡像倉庫應是一個優秀的 DevOps 平臺不可或缺的能力。
這四種產品推出 CI/CD 功能的時間不一樣:
所以,極狐GitLab/GitLab 已經在 CI/CD 領域沉淀了多年,而且每月迭代版本都會有關于 CI/CD 相關的特性發布,目前功能比較強大,使用方式也很靈活。此外,極狐GitLab/GitLab/GitHub 都使用 Runner 來實現 CI/CD Pipeline 的執行,Runner 可以使用產品默認提供的,也可以自主安裝到用戶自己所在的服務器上。而 Gitee 推出 CI/CD 功能較晚,目前沒有類似的功能實現 CI/CD Pipeline 的靈活執行。
此外,GitHub Action 采用了 Marketplace 的策略來方便用戶靈活構建自己的 CI/CD Pipeline,但是由于 Marketplace 缺乏安全保證機制,使用 Marketplace 上面的組件需要保持安全警惕。
GitOps 是云原生應用程序部署和管理的新模式,能夠極大的簡化云原生應用程序的部署,提高開發人員和運維人員之間的協作效率。極狐GitLab 和 GitLab 在 13.x 版本中引入了對 GitOps workflow 的支持。詳細的內容可以查看博客文章極狐GitLab Kubernetes Agent 是如何支持 GitOps workflow 的?。而 GitHub、Gitee 暫時沒有對 GitOps 的支持能力。
從 Anchore 2021 年軟件供應鏈安全報告 [5] 中可以看出,安全將會是眾多公司或者組織的首要工作,與軟件供應鏈是否安全密切相關。在安全方面,極狐GitLab 和 GitLab 有七大安全利劍:容器鏡像掃描、靜態應用安全測試 (SAST)、動態應用安全掃描(DAST)、密鑰檢測、License合規、依賴項掃描以及模糊測試。DevSecOps 能力覆蓋整個軟件開發生命周期的各個階段。GitHub 的安全能力是通過 Advanced Security [6] 來提供的,包含 Code scanning、Secret scanning、Dependency review等,但并不是覆蓋軟件開發全生命周期的。而 Gitee 僅僅通過 Gitee Scan [7] 來對代碼缺陷、代碼規范等做一些掃描,安全能力同樣不是覆蓋軟件開發生命周期的。
極狐GitLab、GitLab 提供很多內置的第三方集成(諸如 Jenkins、Slack、Jira 等),而 GitHub 不提供內置的第三方集成,都是第三方提供對 GitHub 的集成。 Gitee 介于 極狐GitLab、GitLab 和 GitHub 之間,有少量的內置集成(如 Jenkins)。
極狐GitLab/GtiLab 均支持云原生的安裝方式(Docker/Helm/Operator),而且均有官方的鏡像和 Chart,能夠方便用戶在云原生的環境中運行極狐GitLab/GitLab 實例。GitHub 與 Gitee 由于不支持自主私有化,目前并不提供相關的鏡像、Chart、Operator。
極狐GitLab/GitLab 已經和 Gitpod [8] 做了集成,能夠幫助開發者快速構建云上的開發環境,提升開發效率和開發體驗。GitHub 也可以與 Gitpod 完成集成,同時 GitHub 在被微軟收購后也和自家的產品 Visual Studio Code 在融合,為開發者提供云開發環境。而 Gitee 到目前為止,沒看到類似的功能特性。
GitHub 維基百科鏈接: https://en.wikipedia.org/wiki/GitHub;
GitLab 發展歷史鏈接: https://about.gitlab.com/company/history/;
Gitee 維基百科鏈接: https://zh.wikipedia.org/wiki/Gitee;
極狐GitLab 官宣成立鏈接: https://mp.weixin.qq.com/s/r-f7JmK0Jt0dUu31_bXiWg
Anchore 軟件供應鏈安全報告: https://anchore.com/software-supply-chain-security-report/
GitHub Advanced Security: https://docs.github.com/en/get-started/learning-about-github/about-github-advanced-security
Gitee Code Scan: https://gitee.com/CodeGenerates/CodeGenerate/gitee_scans
Gitpod 鏈接: https://www.gitpod.io/
GitHub Package 功能: https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-container-registry