一款用Go編寫的,由開源社區驅動的代碼託管平臺Gitea

介紹

Gitea是一個由開源社區驅動的輕量級的代碼託管解決方案,後端採用Go語言編寫,採用MIT許可證協議。使用Gitea可以搭建一個自己託管的Git服務程序,與Github、Bitbucket和Gitlab比較類似,但更加輕量。Gitea是2016年11月從Gogs發展出來,並且做了很多改進,目標就是創建一個極易安裝、運行快速、體驗良好的自建Git服務。目前在Github上有16.9k個Star、1.9k個fork,657個貢獻者,社區活力非常強勁,並且雲原生下的Jenkins X也在支持Gitea,相信在不遠的未來,一定能成為一款成熟的雲原生下的Git服務平臺。

一款用Go編寫的,由開源社區驅動的代碼託管平臺Gitea

特性

Gitea目前的功能特性也很強大,能夠滿足內部Git服務的基本要求,支持如下特性:

  • 支持活動時間線
  • 支持 SSH 以及 HTTP/HTTPS 協議
  • 支持 SMTP、LDAP 和反向代理的用戶認證
  • 支持反向代理子路徑
  • 支持用戶、組織和倉庫管理系統
  • 支持添加和刪除倉庫協作者
  • 支持倉庫和組織級別 Web 鉤子(包括 Slack 集成)
  • 支持倉庫 Git 鉤子和部署密鑰
  • 支持倉庫工單(Issue)、合併請求(Pull Request)以及 Wiki
  • 支持遷移和鏡像倉庫以及它的 Wiki
  • 支持在線編輯倉庫文件和 Wiki
  • 支持自定義源的 Gravatar 和 Federated Avatar
  • 支持郵件服務
  • 支持後臺管理面板
  • 支持 MySQL、PostgreSQL、SQLite3, MSSQL 和 TiDB(實驗性支持) 數據庫
  • 支持多語言本地化(21 種語言)

與其他Git託管工具的橫向比較

以Gitea官網為主,由於並未定時檢查,有些特性可能並不是最新的。

主要特性

一款用Go編寫的,由開源社區驅動的代碼託管平臺Gitea

代碼管理

一款用Go編寫的,由開源社區驅動的代碼託管平臺Gitea

Issue 管理

一款用Go編寫的,由開源社區驅動的代碼託管平臺Gitea

Pull/Merge requests

一款用Go編寫的,由開源社區驅動的代碼託管平臺Gitea

第三方集成

一款用Go編寫的,由開源社區驅動的代碼託管平臺Gitea

安裝

Gitea提供了多個平臺、多種安裝方式,不管是獨立安裝、容器部署還是基於源碼安裝都支持。

1、從Docker安裝

在Docker Hub裡有Gitea最新的Docker鏡像,並且會保持持續更新,可以使用docker pull命令來拉取Gitea的鏡像。

docker pull gitea/gitea:latest

使用docker安裝需要注意一點:容器每次啟動都會基於鏡像原始狀態,因此每次重啟時,容器內部所做的更改都會丟失。特別是對於需要持久化的代碼倉庫數據,一定要將目錄掛載出來,防止容器重啟丟失。假如,在外部磁盤有一個/var/lib/gitea的目錄,我們可以這樣啟動docker容器:

docker run -d --name=gitea -p 10022:22 -p 10080:3000 -v /var/lib/gitea:/data gitea/gitea:latest

當容器成功啟動後,就可以在瀏覽器中輸入http://localhost:10080進行訪問,可以嘗試在上面創建項目,使用git clone ssh://git@hostname:10022/username/repo.git進行clone操作。

2、Linux安裝

在Gitea的Github頁面的Release裡可以下載官方發佈的任意版本的安裝程序,在安裝程序裡默認集成了SQLite,同時也支持MySQL和PostgreSQL,以及所有需要的資源都已經嵌入到安裝程序裡。

一款用Go編寫的,由開源社區驅動的代碼託管平臺Gitea

以systemd方式運行

在命令行裡執行如下命令,拷貝gitea.service裡的內容,並取消和修改裡面的初始化參數,如:user的home目錄、自定義的端口等。

sudo vim /etc/systemd/system/gitea.service

修改完後,激活gitea並將其作為系統自啟動服務:

sudo systemctl enable gitea
sudo systemctl start gitea

3、Window安裝

Window的安裝程序也可以在Gitea的Github頁面的Release裡可以下載官方發佈的任意版本,一個獨立的安裝包就可以啟動運行。

一款用Go編寫的,由開源社區驅動的代碼託管平臺Gitea

要註冊為Window的服務,首先要以Administrator身份運行 cmd,然後執行以下命令,其中C:\\gitea為你安裝Gitea的目錄:

sc create gitea start= auto binPath= ""C:\\gitea\\gitea.exe" web --config "C:\\gitea\\custom\\conf\\app.ini""

之後在控制面板打開 “Windows Services”,搜索 “gitea”,右鍵選擇 “Run”。在瀏覽器打開 http://localhost:3000 就可以訪問了。(如果你修改了端口,請訪問對應的端口,3000是默認端口)。

一款用Go編寫的,由開源社區驅動的代碼託管平臺Gitea

4、源碼安裝

因為Gitea是用Go語言編寫,首先需要安裝GoLang,並且已經安裝了Git版本控制工具。

下載源碼

首先需要從github上獲取Gitea的源碼,使用如下命令clone源碼:

git clone https://github.com/go-gitea/gitea.git cd ./gitea

編譯源碼

這裡默認下載master分支,如果使用其他分支,可以checkout到目標分支。下面使用go build進行編譯。

go build

測試程序

在執行了以上步驟之後,你將會獲得 gitea 的二進制文件,在命令行執行./gitea web啟動程序,也能打開上面的界面。

使用

組織結構

代碼託管平臺雖然是用來託管代碼的,但代碼庫以及用戶本身都會有組織的屬性。代碼庫要屬於系統、應用、項目或產品,而這些又屬於某個團隊、某個部門,同樣,開發人員也有自己的團隊、和部門。這些都在統計代碼提交數據時都是非常重要的維度。在Gitea裡,可以通過創建組織以及下一級的團隊來實現組織結構,但不能創建多級組織。如下圖所示:EE是一級組織(只支持字母和數字),在EE組織下面,可以創建多個團隊,目前創建了DevOps這個團隊。還可以看到整個組織以及團隊的成員和代碼庫。

一款用Go編寫的,由開源社區驅動的代碼託管平臺Gitea

創建代碼庫

組織結構創建好了,就可以創建代碼庫了,在創建代碼庫的時候,可以選擇這個代碼庫歸屬於哪個組織,以及代碼庫名稱、描述和其他代碼庫相關的信息。

一款用Go編寫的,由開源社區驅動的代碼託管平臺Gitea

代碼庫頁面

創建好的代碼庫如下所示,這個界面相信大家都非常熟悉了,和Github和Gitlab非常相似。

一款用Go編寫的,由開源社區驅動的代碼託管平臺Gitea

代碼下載和提交

使用http或ssh協議將源碼下載,然後修改README.md文件,增加“這是一個不錯的git server

”。然後,git add ,git commit,git push將變更提交到遠程服務器上。

一款用Go編寫的,由開源社區驅動的代碼託管平臺Gitea

刷新代碼庫頁面,可以發現README.md文件已經變了,同時提交數為2個。

一款用Go編寫的,由開源社區驅動的代碼託管平臺Gitea

查看變更

點開“2次提交”可以顯示提交歷史,當前有2次提交,第二次就是剛才的提交信息,包括提交者、commitID,備註,提交時間等信息。

一款用Go編寫的,由開源社區驅動的代碼託管平臺Gitea

點擊CommitID就會打開本次提交的Diff視圖,能夠清晰的看到本次變更的內容。

一款用Go編寫的,由開源社區驅動的代碼託管平臺Gitea

Fork代碼

如何要開發一個新需求,可以fork新建一個自己的代碼倉庫。

一款用Go編寫的,由開源社區驅動的代碼託管平臺Gitea

在fork後的代碼庫上提交變更。修改內容為README.md文件,增加“我覺得也是”。

一款用Go編寫的,由開源社區驅動的代碼託管平臺Gitea

合併請求

假如此時變更開發完成,需要合併到主幹,可以創建合併請求

一款用Go編寫的,由開源社區驅動的代碼託管平臺Gitea

合併請求創建完成後,可以在源代碼庫的合併請求標籤頁中顯示請求信息,也包含討論動態、代碼提交和文件變動等信息。

一款用Go編寫的,由開源社區驅動的代碼託管平臺Gitea

經過檢查,代碼可以合入到主幹後,可以點擊“合併請求”按鈕,將提交的請求進行合併。合併之前,該合併請求的狀態就變成“已合併”。

一款用Go編寫的,由開源社區驅動的代碼託管平臺Gitea

同時,從提交圖中也可以看出合併的操作。

一款用Go編寫的,由開源社區驅動的代碼託管平臺Gitea

除此之外,gitea還可以創建工單、版本發佈、百科和動態的功能,大家可以去嘗試,這裡就不一一羅列了。

總結

如今,版本控制系統經過集中式的控制時代,進入了分佈式版本控制時代,而分佈式版本控制,用的非常多的工具就是Git,Git可以不僅可以實現代碼的版本控制,還可以實現文檔等二進制文件的版本控制,在基礎設施及代碼最佳實踐中,所有基礎設施的構建已經版本控制都會採用Git進行管理。

Gitea作為一個用Go語言編寫的輕量級的Git Server,能夠滿足DevOps幾乎全部的版本控制場景。Gitea的社區非常活躍,功能仍舊在不斷完善中。另外,Jenkins X 雲原生時代的CICD框架也開始支持Gitea,雖然目前還有問題。雲原生時代的CICD與Git的結合,能夠大大提高代碼構建、環境準備、環境部署的效率。

DevOps提高的是效率和質量,選擇一款合適的Git Server也是其中重要的一環,期待Gitea越來越好,成為雲原生時代的爆款。


分享到:


相關文章: