项目

常规

个人资料

操作

如何在提交时在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
    

    或者对于https
    private 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次修订