HowTo setup automatic refresh of repositories in Redmine on commit » History » Version 16

Mohit Sindhwani, 2012-07-18 17:31

1 1 Etienne Massip
h1. HowTo setup automatic refresh of repositories in Redmine on commit
2 4 Mischa The Evil
3 4 Mischa The Evil
{{>toc}}
4 1 Etienne Massip
5 15 Etienne Massip
Since of version 0.9.0, you can use an HTTP GET submission to automatically refresh Redmine after you committed your modification in your repository.
6 1 Etienne Massip
7 10 Maxim Strukov
Examples:
8 1 Etienne Massip
9 1 Etienne Massip
* _/sys/fetch_changesets?key=<your service key>_ fetches changesets for all active projects
10 7 Felix Schäfer
* _/sys/fetch_changesets?id=<project identifier>&key=<your service key>_ fetches changesets from the repository of a specific project
11 1 Etienne Massip
12 16 Mohit Sindhwani
*Notice:* 
13 16 Mohit Sindhwani
* Instead of calling an url, you can use @ruby /path_to_redmine/redmine/script/runner "Repository.fetch_changesets" -e production > /dev/null 2>&1 &@.
14 16 Mohit Sindhwani
* Note also that project identifier can either be the number of the project, e.g. @id=1@ or the identifier name that you gave the project, e.g., @id=mobileapp@
15 13 C. X.
16 1 Etienne Massip
See #2925 for original feature request.
17 1 Etienne Massip
18 1 Etienne Massip
h2. Step 1 : configure Redmine to accept the request
19 1 Etienne Massip
20 1 Etienne Massip
Web service for repositories must by activated in the Administration menu and the generated key will have to be used by the caller in Step 2.
21 1 Etienne Massip
22 1 Etienne Massip
h2. Step 2 : setup a post-commit script on the SCM server
23 1 Etienne Massip
24 1 Etienne Massip
You have to setup a post-commit script which will call the previous URL.
25 1 Etienne Massip
26 1 Etienne Massip
h3. Subversion
27 1 Etienne Massip
28 8 Etienne Massip
Simply add a @post-commit@ (or @post-commit.cmd@ on a Windows system) script file in the hooks sub-directory which contains the HTTP request call :
29 8 Etienne Massip
<pre><code class="sh">
30 1 Etienne Massip
#!/bin/sh
31 1 Etienne Massip
32 6 Jürgen Hörmann
curl "http://<redmine url>/sys/fetch_changesets?key=<your service key>"
33 8 Etienne Massip
</code></pre>
34 12 razumuhin map
or if you want to use wget 
35 12 razumuhin map
<pre><code class="sh">
36 12 razumuhin map
wget "http://your/redmine/path/sys/fetch_changesets?key=<API KEY>"
37 12 razumuhin map
</code></pre>
38 12 razumuhin map
Note: Don`t forget wget in your computer path.
39 11 razumuhin map
40 1 Etienne Massip
Or, on a Windows system (2 files) :
41 1 Etienne Massip
42 8 Etienne Massip
* @post-commit.cmd@ :
43 8 Etienne Massip
<pre><code class="cmd">
44 2 Etienne Massip
cscript "%~dp0refresh_redmine.vbs" //Nologo >> "%~dp0refresh_redmine.log" 2>&1
45 8 Etienne Massip
</code></pre>
46 1 Etienne Massip
47 8 Etienne Massip
* @refresh_redmine.vbs@ :
48 8 Etienne Massip
<pre><code class="vbs">
49 1 Etienne Massip
private const REDMINE_SERVICE_KEY = "<your service key>"
50 1 Etienne Massip
51 15 Etienne Massip
Call HTTPGet("http://<redmine url>/sys/fetch_changesets?key=" & REDMINE_SERVICE_KEY)
52 1 Etienne Massip
53 15 Etienne Massip
Private Function HTTPGet(sUrl)
54 15 Etienne Massip
  Dim oHTTP
55 1 Etienne Massip
  set oHTTP = CreateObject("Microsoft.XMLHTTP")
56 15 Etienne Massip
  oHTTP.open "GET", sUrl, False
57 15 Etienne Massip
  oHTTP.send
58 15 Etienne Massip
  HTTPGet = oHTTP.responseText
59 1 Etienne Massip
End Function
60 8 Etienne Massip
</code></pre>
61 9 András Veres-Szentkirályi
62 9 András Veres-Szentkirályi
h3. Git
63 9 András Veres-Szentkirályi
64 9 András Veres-Szentkirályi
Simply add a @post-receive@ (even on a Windows system, no extension is required) script file in the hooks sub-directory which contains the HTTP request call:
65 9 András Veres-Szentkirályi
66 9 András Veres-Szentkirályi
<pre><code class="sh">
67 9 András Veres-Szentkirályi
#!/bin/sh
68 9 András Veres-Szentkirályi
69 9 András Veres-Szentkirályi
curl "http://<redmine url>/sys/fetch_changesets?key=<your service key>"
70 9 András Veres-Szentkirályi
</code></pre>
71 9 András Veres-Szentkirályi
72 9 András Veres-Szentkirályi
This setup works in the "usual" case, where Redmine's repository is set to a bare Git repository, so no commits can happen directly in there. If you have a rare setup with a non-bare repository linked to Redmine, you need to add the script as a @post-commit@ hook as well.
73 9 András Veres-Szentkirályi
74 9 András Veres-Szentkirályi
Don't forget to make the file(s) executable on UNIXish systems, more information about Git hooks can be found in the "githooks":http://www.kernel.org/pub/software/scm/git/docs/githooks.html man page.
75 14 Hadrien KOHL
76 14 Hadrien KOHL
h3. Only update relevant project
77 14 Hadrien KOHL
78 14 Hadrien KOHL
/sys/fetch_changesets accepts id parameter, so you can limit the refrech to the correct project : 
79 14 Hadrien KOHL
80 14 Hadrien KOHL
<pre><code class="sh">
81 14 Hadrien KOHL
#!/bin/bash
82 14 Hadrien KOHL
83 14 Hadrien KOHL
_apikey=XXXXXXXXXXXXXXXXXXXX
84 14 Hadrien KOHL
85 14 Hadrien KOHL
_projectid=${PWD##*/}
86 14 Hadrien KOHL
_projectid=${_projectid%*.git}
87 14 Hadrien KOHL
88 14 Hadrien KOHL
curl "http://<redmine url>/sys/fetch_changesets?key=$_apikey&id=$_projectid"&
89 14 Hadrien KOHL
</code></pre>