如何在 Redmine 中設定儲存庫於提交時自動更新¶
從 0.9.0 版開始,您可以使用 HTTP GET 提交在儲存庫中提交修改後自動更新 Redmine。
範例
- /sys/fetch_changesets?key=<您的服務金鑰> 會擷取所有活動專案的變更集
- /sys/fetch_changesets?id=<專案識別碼>&key=<您的服務金鑰> 會從特定專案的儲存庫中擷取變更集
- 除了呼叫網址之外,您也可以使用
ruby /path_to_redmine/redmine/script/rails runner "Repository.fetch_changesets" -e production > /dev/null 2>&1 &
。 - 另請注意,專案識別碼可以是專案的編號,例如
id=1
,也可以是您為專案指定的識別碼名稱,例如id=mobileapp
如需原始功能請求,請參閱 #2925。
步驟 1:設定 Redmine 以接受請求¶
必須在「管理」選單中啟用儲存庫的網路服務(管理 - 設定 - 儲存庫 - 啟用儲存庫管理的 WS),並且呼叫者必須在步驟 2 中使用產生的 API 金鑰(以下文件中稱為「您的服務金鑰」)。
步驟 2:在 SCM 伺服器上設定 post-commit 腳本¶
您必須設定一個 post-commit 腳本,用於呼叫先前的網址。
Subversion¶
只需在 hooks 子目錄中新增一個 post-commit
(或 Windows 系統上的 post-commit.cmd
)腳本檔案,其中包含 HTTP 請求呼叫
#!/bin/sh
curl "http://<redmine url>/sys/fetch_changesets?key=<your service key>"
或者,如果您想使用 wget
wget "http://<redmine url>/sys/fetch_changesets?key=<your service key>"
注意:請勿忘記將 wget 新增到您的電腦路徑中。
或者,在 Windows 系統上(2 個檔案)
post-commit.cmd
:cscript "%~dp0refresh_redmine.vbs" //Nologo >> "%~dp0refresh_redmine.log" 2>&1
refresh_redmine.vbs
:private const REDMINE_SERVICE_KEY = "<your service key>" Call HTTPGet("http://<redmine url>/sys/fetch_changesets?key=" & REDMINE_SERVICE_KEY) Private Function HTTPGet(sUrl) Dim oHTTP set oHTTP = CreateObject("Microsoft.XMLHTTP") oHTTP.open "GET", sUrl, False oHTTP.send HTTPGet = oHTTP.responseText End Function
或者,對於 httpsprivate const REDMINE_SERVICE_KEY = "<your service key>" Call HTTPGet("https://<redmine url>/sys/fetch_changesets?id=<your project id>&key=" & REDMINE_SERVICE_KEY) Private Function HTTPGet(sUrl) Dim oHTTP set oHTTP = CreateObject("MSXML2.ServerXMLHTTP") oHTTP.open "GET", sUrl, False oHTTP.setOption 2, 13056 oHTTP.send HTTPGet = oHTTP.responseText End Function
或者,在 Windows 系統上
如果您的系統路徑中有 Ruby,只需在儲存庫的 hooks 子目錄中建立 post-commit.bat
腳本檔案
ruby -e "require 'open-uri'; open('http://<redmine url>/sys/fetch_changesets?key=<your service key>').read;"
如果已安裝 Perl,只需在儲存庫的 hooks 子目錄中建立 post-commit.bat
腳本檔案
perl -mLWP::Simple -e "$url = 'http://<redmine url>/sys/fetch_changesets?key=<your service key>'; LWP::Simple::get($url);"
Git¶
只需在 hooks 子目錄中新增一個 post-receive
(即使在 Windows 系統上,也不需要副檔名)腳本檔案,其中包含 HTTP 請求呼叫
#!/bin/sh
curl "http://<redmine url>/sys/fetch_changesets?key=<your service key>"
這種設定適用於「常見」的情況,即 Redmine 的版本庫設定為一個裸 Git 版本庫,因此無法直接在其中進行提交。如果您有一個罕見的設定,即一個非裸版本庫鏈接到 Redmine,則您也需要將腳本添加為 post-commit
鉤子。
不要忘記在類 UNIX 系統上使文件可執行,更多關於 Git 鉤子的資訊可以在 githooks 線上手冊頁中找到。
如果 Redmine 專案被配置為使用與原始 Git 版本庫位於同一主機上的鏡像版本庫,您也可以使用 post-receive
鉤子來更新該 Redmine 鏡像版本庫,因此整個腳本可以是
#!/bin/sh
cd /<path_to_origin_git_repo>/<your_git_prj.git>
git push /<redmine_path>/<git_repo>/<your_git_prj.git> master
curl "http://<redmine url>/sys/fetch_changesets?key=<your service key>"
- 這也將消除對鏡像同步 cron 腳本的需求,並且將有助於在每次 git push 事件之後保持 Redmine 的專案版本庫同步
僅更新相關專案¶
/sys/fetch_changesets 接受 id 參數,因此您可以將更新限制在正確的專案
#!/bin/bash
_apikey=XXXXXXXXXXXXXXXXXXXX
_projectid=${PWD##*/}
_projectid=${_projectid%*.git}
curl "http://<redmine url>/sys/fetch_changesets?key=$_apikey&id=$_projectid"&
僅更新相關版本庫¶
如果您可以將提交鉤子安裝在版本庫伺服器上,則可以使用 這個 外掛程式僅獲取特定版本庫的提交。
由 Tom Rochette 於 超過 8 年前 更新 · 29 個版本