MapleCheng

在浩瀚的網路世界中無限潛水欸少年郎!

0%

我們評估了 GitLab EE 三天,然後決定繼續用 Gitea

事情的起因是這樣的。

最近在重新整理專案管理工具,想看看有沒有比現在更好的選擇。我們用 Gitea 自架已經一段時間了,整體沒什麼大問題,但 Issue 管理的功能比較陽春,特別是當你有多個客戶、多個專案、需要做 roadmap 規劃的時候,就會開始覺得有些地方卡卡的。

然後有人提到 GitLab EE 有 Epics、Group-level Boards、Scoped Labels⋯⋯

「聽起來不錯,不然花三天時間認真評估一下?」

就這樣,我們搭了一個示範環境,把現有的組織結構複製進去,然後開始玩。


先說評估的環境設定

我們用 GitLab EE(self-managed)搭了一個測試環境,設定如下:

  • 5 個使用者
  • 7 個頂層 Group(對應客戶 + 內部)
  • 16 個子 Group(細分業務線)
  • 33 個 Project
  • 27 個 Issues(從實際案子抽樣建的)

這樣的規模基本上跟我們的真實情況差不多,評估起來比較有感覺,不是空架一個空殼就說「好用」或「不好用」。


GitLab EE 到底多了什麼

先聊聊讓我們認真考慮的功能。

Epics

這是 EE 最吸引我的功能。Epics 讓你可以跨 Project 把相關的 Issues 組織在一起,還可以設開始/結束日期、形成父子層級(Epic 底下可以有子 Epic)。

對我們來說,一個客戶的系統導入通常會橫跨多個功能模組(每個模組一個 Project),但從業務的角度看它們是同一件事。用 Epic 把這些 Issues 串起來,規劃起來直觀很多。

Scoped Labels

Scoped Labels 的語法是 scope::value,同一個 scope 底下只能選一個值。典型的用法是 status::in-progressstatus::blockedstatus::done——這樣 Issue 就不可能同時被標成「進行中」又「已完成」。

聽起來是個小功能,但在多人協作的情境下,這種互斥邏輯其實能省掉不少手動清理 label 的麻煩。

Group-level Boards

Gitea 的 Board 是 Project 層級的,想看整個客戶的 Issue 狀態得一個 Project 一個 Project 切換。GitLab 的 Group Board 讓你在 Group 層級直接看跨 Project 的 Issue 全貌。

這對做 sprint 規劃很有幫助——你不用為了看進度一直開分頁。

Issue Links(Blocking/Blocked by)

Issues 之間可以設依賴關係。A 完成之前 B 不能開始,這種依賴在排優先順序的時候很重要。Gitea 的 Issue 是相對獨立的,要做這種關聯要自己在 description 裡手動寫,不太正式。


但問題也不少

評估了三天之後,冷靜下來想一下。

管理複雜度上升很明顯

GitLab 的設定選項多到一個程度,光是把組織架構搭好、設定好 Group 層級的 permission、把 label 繼承邏輯搞清楚,就花了不少時間。

Gitea 的設定頁面相對簡單,一個 Org、幾個 Repo,權限設一設就能用了。GitLab 的 Group + Subgroup + Project + Member Roles + Permission inheritance⋯⋯光是搞懂這些的心智模型就要花時間。

升級路徑和版本管理

自架 GitLab 的升級路徑有時候會有版本跳躍的限制(不能跳太多版本直接升),這對自己維護的小團隊來說是個額外的心智負擔。Gitea 相對直觀,docker pull 新版本然後重起來通常沒什麼大問題。

資源需求

GitLab 比 Gitea 吃更多資源,這是已知的事情,但實際跑起來還是有感。我們的主機是 Mac Mini,平時跑 Gitea + 幾個 Docker 服務都還好,GitLab 加進來的話就要開始考慮記憶體配置了。

Epics 是 EE 專屬

Epics 這個功能在 Community Edition 裡沒有。如果你要用 EE,self-managed 的 Ultimate tier 不便宜,對一個小規模自架環境來說有點難以說服自己付這個費用。(雖然可以用免費試用期,但長期要付費就要算一下。)


Gitea 的優勢重新看了一遍

評估 GitLab 的過程中,我反而更清楚 Gitea 的優點在哪裡。

快。 Gitea 的 UI 載入速度就是快,在低資源的環境下跑起來很輕鬆。

簡單。 我們不是大公司,不需要 LDAP、Audit Log、Compliance Dashboard。Gitea 的功能剛剛好。

社群活躍、更新快。 近年 Gitea 的功能迭代滿積極的,Projects(Kanban)、Milestones、Issue 的 dependency 功能也慢慢在加。

Issues + Milestones 對我們夠用。 說實話,我們目前的痛點主要在於標籤管理比較散、還有缺乏跨 Project 視角,不是說 Gitea 的 Issues 功能本身不夠用。


最後的決定:維持 Gitea,但補一點工作流程

結論是繼續用 Gitea,但在工作流程上做一點調整:

  • 統一 Label 規範:定義跨 Org 的 label 命名慣例,類似 Scoped Labels 的邏輯(status-in-progressstatus-blocked)用命名來約束
  • 善用 Milestones:用 Milestone 來模擬 Epic 的概念,把相關 Issues 掛到同一個 Milestone
  • 定期做跨 Project 的 Issue review:用腳本或手動整理,而不是靠工具的 Group Board

說真的,這不是 GitLab 不好——GitLab 是個很完整的平台,那些功能確實很香。但在我們現在的規模和資源限制下,Gitea 更符合「夠用、跑得快、好維護」的需求。

工具的好壞是相對於使用情境的。一個 100 人工程團隊用 GitLab EE 完全合理,但對 5 個人的小團隊來說,把精力花在把工具設定好可能不如把精力花在做產品上。


一點延伸想法

這次評估讓我想到一個更大的問題:技術工具的選擇很容易被功能清單影響,但真正決定工具好不好用的,往往是「導入成本」和「日常維護成本」。

一個功能齊全但設定繁複的工具,和一個功能簡單但三分鐘就能上手的工具——選哪個好,要看你的團隊在哪個階段。

現在選了 Gitea,不代表以後不換。等到規模真的大了、現有工具明顯卡關了,再重新評估。

但就現在來說,繼續用 Gitea,多花一點時間把工作流程訂好,這才是值得投入的地方。

如果這篇能幫你在選 Git 平台的時候多一個參考角度,那就值了。😂