I've been a fan and user of Atlassian's excellent Jira since the
company was founded back in 2002, but I needed the ability to set up
some quick-hit bug/task/wiki sites for smaller consulting projects and
neither the month-to-month hosted model nor the enterprise license
made good economic sense. I opted for the an install of Redmine, and while it's no Jira,
I've been reasonably happy with it. (The one big headache was getting
SMTP over TLS working.)
Redmine supports integration with Git repositories on a per-project
basis and will link commits to issues based on the presence of
keywords and issue identifiers (e.g., "refs #123"). The
way the integration is implemented works well if the Git repository is
hosted on the same machine as the Remine instance, but I host all
customer and internal work on github.
Here's a quick recipe to bridge the gap.
First, add an ssh key for the redmine user to your
github account.
Next, create a home for the following shell script, e.g.,
/opt/redmine_extras/bin and a home for Git repositories
on the server, e.g., /var/redmine/git_repositories and
ensure that the redmine user has write privileges for the
repositories. Here's the pull_git script:
#!/bin/bash
export REPOS=/var/redmine/git_repositories
export REDMINE_HOME=/opt/redmine-0.8.2
export LOGFILE=/var/log/redmine_extras.log
function log_prefix {
echo -n `date '+%Y/%m/%d %H:%M:%S'`" ["$$"] ${2}"
}
for i in `ls -d ${REPOS}/*.git`; do
cd $i;
log_prefix && echo 'Processing git repository from '${i}'...';
/usr/local/bin/git --bare fetch origin :master
done
cd ${REDMINE_HOME}
log_prefix && echo 'Updating Redmine...'
/usr/local/bin/ruby script/runner "Repository.fetch_changesets" -e production
Then (I'm logged in as root) add the command to the
redmine user's crontab:
# echo '*/10 * * * * /opt/redmine_extras/bin/pull_git 2>&1 >> /var/log/redmine_extras.log'\
| crontab -u redmine -
Now, for each repository, say foo and your github user
is bar, you will track from Redmine, do:
# cd /var/redmine/git_repositories
# sudo -u redmine -H git clone --bare git@github.com:bar/foo.git
# cd foo.git
# sudo -u redmine -H git --bare remote add origin git@github:bar/foo.git
Ensure that the Redmine project points to the local copy of the
Git repository, and the revisions should start getting syncronized
every ten minutes.