目的:
讓 Redmine 可以瀏覽位於遠端 Git Server 如 GitHub 儲庫每一次的提交 (commit)歷史資訊,並能達成 Redmine 的 Issue 與 Git Commit 關聯。
說明:
Redmine 僅能讀取位於 local 端的儲庫 (repository)內容,卻沒有支援透過 Git 協定連結位於遠端 Git Server 上的儲庫。
主要解決方案就是先在 local 端建立對遠端儲庫的鏡射 (mirror),然後透過以下三種方式之一:
- 建立批次檔,內容為可以提取更新遠端的儲庫內容 (ex. git fetch -q --all)並設定定期執行作業 (ex. cron)。可以參考此篇-HowTo keep in sync your git repository for redmine。
- 在 GitHub 上所欲讀取的儲庫專案,在其設定 → Service Hooks 上啟動 Redmine,輸入包括 Remine 所在 Url、專案名稱、API Keys 等欄位資訊,並勾選相關執行選項。可以參考此篇-HowTo simply keep Redmine in sync with GitHub。
- 在 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 儲存機制。
* 新增專案,並設定儲存機制為 Git,並指向所設定的儲庫 (local)路徑。
* 點選該專案 → 儲存機制,查看是否可以瀏覽該儲庫提交內容。
登入 GitHub
* 點選欲同步的儲庫,點選 Settings → Services Hooks,點選 WebHook URLs,輸入 Remine 所在專案的 Url 位址,輸入格式為:http://redmine.example.com/github_hook?project_id=my_project。
完成!!利用另一台電腦新增檔案至該 GitHub 儲庫,然後回至 Redmine 首頁的專案位置,查看儲存機制是否有反應提交的資訊。
※ 延伸閱讀
o HowTo-安裝 Redmine 2.3.2@EC2-Ubuntu 12.04。