Project

General

Profile

Actions

HowTo keep Redmine in sync with Github without dedicated plugin (Apache CGI + Github Webhook) » History » Revision 3

« Previous | Revision 3/10 (diff) | Next »
crypto gopher, 2018-09-17 15:00


HowTo keep Redmine in sync with Github without dedicated plugin (Apache CGI + Github Webhook)

This is a solution in case you don't want to install additional plugins just to keep repository synchronised. It requires you to have Apache webserver with access to repository you are trying to sync. Apache has to support running CGI scripts.

Prepare CGI script

Any script you run on your server will do. Below is an example of Bash script that pulls git repository and notifies Redmine to fetch changesets:

#!/bin/sh
/usr/bin/git -C /var/lib/redmine/tv/repo/token_voting pull -n -q
result1=$?

/usr/bin/curl --max-time 60 -s 'https://tv.michalczyk.pro/sys/fetch_changesets?id=token-voting&key=2GkhmLmtTjKoXYf6PS9y' >/dev/null
result2=$?

if [[ $result1 && $result2 ]]; then
  echo "Status: 200 OK" 
else
  echo "Status: 500 Internal Server Error" 
fi

echo "Content-Type: text/plain; charset=utf-8" 
echo

if [[ $result1 ]]; then
  echo "git pull: ok" 
else
  echo "git pull: failed" 
fi

if [[ $result2 ]]; then
  echo "fetch changesets: ok" 
else
  echo "fetch changesets: failed" 
fi

Let's say you save this script under: /var/www/localhost/cgi-bin/update-repo.cgi

Configure Apache to run script whenever particular URL is requested

Inside VirtualHost of your choice just add:

  ...
  # Github webhook for repository pull/update
  ScriptAlias /update-repo.cgi /var/www/localhost/cgi-bin/update-repo.cgi
  <Directory /var/www/localhost/cgi-bin/>
    Options ExecCGI
    AllowOverride None
    Require all granted
  </Directory>
  ...

In case you use the same VirtualHost to proxy requests to your Redmine rails server, you should exclude your special URL from being proxied with:

ProxyPass /update-repo.cgi !

Configure Github Webhook

Go to your Github repository page, choose Settings -> Webhooks -> Add webhook. Then set:
  • Payload URL: https://your.virtualhost.com/update-repo.cgi
  • Which events would you like to trigger this webhook?: Just the push event.
  • Active: yes

Update webhook and you're done.

Updated by crypto gopher over 5 years ago · 3 revisions