目的:

讓 Redmine 可以瀏覽位於遠端 Git Server 如 GitHub 儲庫每一次的提交 (commit)歷史資訊,並能達成 Redmine 的 Issue 與 Git Commit 關聯。

說明:

Redmine 僅能讀取位於 local 端的儲庫 (repository)內容,卻沒有支援透過 Git 協定連結位於遠端 Git Server 上的儲庫。

主要解決方案就是先在 local 端建立對遠端儲庫的鏡射 (mirror),然後透過以下三種方式之一:

  1. 建立批次檔,內容為可以提取更新遠端的儲庫內容 (ex. git fetch -q --all)並設定定期執行作業 (ex. cron)。可以參考此篇-HowTo keep in sync your git repository for redmine
  2. 在 GitHub 上所欲讀取的儲庫專案,在其設定 → Service Hooks 上啟動 Redmine,輸入包括 Remine 所在 Url、專案名稱、API Keys 等欄位資訊,並勾選相關執行選項。可以參考此篇-HowTo simply keep Redmine in sync with GitHub
  3. 在 Redmine 所在位置安裝 Redmine GitHub Hook plugin,並於 GitHub 上該儲庫專案新增一個 WebHook URL,填入 Remine 專案所在 Url 位置,由 GitHub 連結 Remine。

第一種方式最簡單,但並不自然,因為 Remine 所在機器需定期執行遠端儲庫更新作業,即使遠端儲庫內容並未更新;第二與第三種方式是屬於 publish-observe 合理的作法,當遠端儲庫 (GitHub)的內容被更新時,它會透過 service hook (擔任 event-handler)轉呼叫位於 Redmine local 端的儲庫來更新內容。

第二種方式的 service hook 是由 GitHub 這邊所提供的,Remine 並不需要安裝額外的 plugin。但我設定嘗試了好幾次卻無法達成更新 Redmine 所在儲庫內容,所以我這裡是採用第三種方式,由 Redmine 這裡提供 github hook plugin,再至 Github 設定 WebHook Url,透過 Web Service 達成兩端的同步。

實作步驟 -

Redmine@Ubuntu 12.04 端

* 安裝與設定 Git

$ sudo apt-get install git

關於 Git 基礎設定,可以參考此篇 — Git 基礎設定 (帳號的環境參數設定)

$ git config --global user.name "Username"
 
$ git config --global user.email "username@email.com"

* 建立對 GitHub 儲庫的鏡射 (clone)

$ git clone --mirror [repo-url]

* 要讓 Remine 具有能讀/寫入該儲庫的權限

$ sudo chown -R www-data:www-data ~/repo/*

* 安裝 redmine github hook plugin
關於如何安裝 Redmine Plugins,可參考此篇-Redmine Plugins

$ cd ~/redmine/plugins
 
$ git clone git://github.com/koppen/redmine_github_hook.git
 
$ rake redmine:plugins:migrate RAILS_ENV=production

重新啟動 Apache Web.

$ sudo service apache2 restart

** 可以至 Redmine 首頁 → 網站管理 → 附加元件 查看是否已安裝。

登入 Redmine 管理頁

* 設定 Redmine 可使用 Git 儲存機制。

Redmine 可使用 Git 儲存機制

* 新增專案,並設定儲存機制為 Git,並指向所設定的儲庫 (local)路徑。

指向 Git 儲庫路徑

* 點選該專案 → 儲存機制,查看是否可以瀏覽該儲庫提交內容。

瀏覽該儲庫提交內容

登入 GitHub

* 點選欲同步的儲庫,點選 Settings → Services Hooks,點選 WebHook URLs,輸入 Remine 所在專案的 Url 位址,輸入格式為:http://redmine.example.com/github_hook?project_id=my_project。

輸入 WebHook URL

完成!!利用另一台電腦新增檔案至該 GitHub 儲庫,然後回至 Redmine 首頁的專案位置,查看儲存機制是否有反應提交的資訊。

瀏覽GitHub反映的提交內容

※ 延伸閱讀
 o HowTo-安裝 Redmine 2.3.2@EC2-Ubuntu 12.04