如何在提交时在Redmine中设置仓库自动刷新¶
从版本0.9.0开始,您可以在提交对仓库的修改后,使用HTTP GET提交自动刷新Redmine。
示例
- /sys/fetch_changesets?key=<你的服务密钥> 获取所有活动项目的更改集
- /sys/fetch_changesets?id=<项目标识符>&key=<你的服务密钥> 从特定项目的仓库获取更改集
- 您可以使用以下命令代替调用URL:
ruby /path_to_redmine/redmine/script/rails runner "Repository.fetch_changesets" -e production > /dev/null 2>&1 &
。 - 注意,项目标识符可以是项目的编号,例如
id=1
,也可以是您给项目赋予的标识名称,例如id=mobileapp
。
有关原始功能请求,请参阅#2925。
步骤 1 : 配置Redmine以接受请求¶
必须在“管理”菜单中激活仓库的Web服务(管理 - 设置 - 仓库 - 启用仓库管理WS)并且必须使用生成的API密钥(以下文档中称为“你的服务密钥”)在步骤2中由调用者使用。
步骤 2 : 在SCM服务器上设置post-commit脚本¶
您必须设置一个post-commit脚本,该脚本将调用前面的URL。
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¶
只需在钩子子目录中添加一个包含HTTP请求调用的post-receive
(即使在Windows系统上,也不需要扩展名)脚本文件
#!/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次修订