RedmineのリポジトリにStashのリポジトリを表示させる
StashとRedmineを連携させる
- RedmineはローカルのGitリポジトリしか見ません。
- GithubやBitbucketだとそれ用の連携Redmineプラグインがあったのですが、自分のところのStashでは上手く動かない?のでRedmineが動いているサーバにmirrorリポジトリを作ることにしました。
Redmineサーバ
$ cd /var/git/test $ git clone --mirror http://userid:passwd@git.example.com/scm/test/test.git
- Redmineでリポジトリの設定をします。
- バージョン管理システム Git
- 識別子 任意の名前
- リポジトリのパス ローカルのミラーリポジトリのパス
- ファイルとディレクトリの最新コミットを表示する チェックを入れる
- しばらくするとリポジトリが見えるようになります。
- あとは下のようなのをcronで10分毎とか回しておけばとりあえず連携できるようになるんですけど、なんかいまいちですよね。
$ cd /var/git/test/test.git $ git fetch --all
StashのHookでfetchするようにする
- External Post Receive Hookプラグインを使います。
- サンプルで提示されているtest-params.shは以下のようになっています。
#!/bin/bash ( echo "Script name: $0" echo "Positional arguments: ${@}" echo "STASH_USER_NAME: $STASH_USER_NAME" echo "STASH_USER_EMAIL: $STASH_USER_EMAIL" echo "STASH_PROJECT_NAME: $STASH_PROJECT_NAME" echo "STASH_REPO_NAME: $STASH_REPO_NAME" echo "STASH_IS_ADMIN: $STASH_IS_ADMIN" echo `env` echo `pwd` while read from_ref to_ref ref_name; do echo "Ref update:" echo " Old value: $from_ref" echo " New value: $to_ref" echo " Ref name: $ref_name" echo " Diff:" git show $to_ref | sed 's/^/ /' done ) | tee -a /tmp/test-params.log
#!/bin/bash ( PROJECT=$1 REPO_NAME="$STASH_REPO_NAME.git" REPO_DIR="/var/git/$PROJECT/$STASH_REPO_NAME.git" ssh -i /home/stash/.ssh/git_key -l ci -t -t redmine.example.com <<EOF if [ ! -d /var/git/$PROJECT ] ; then mkdir /var/git/$PROJECT cd /var/git/$PROJECT git clone --mirror http://git.example.com/scm/$PROJECT/$REPO_NAME fi cd $REPO_DIR git fetch --all exit EOF ) | tee /tmp/git-mirror.log
- sshしてから実行するスクリプトにインデントがあると上手く動かないので、見づらいですがインデントなしにします。
- stashのリポジトリ設定からフックを設定します。
- リポジトリ選択→設定→フック→External Post Receive Hook
- Executable: /home/stash/bin/git-mirror.sh
- Positional parameters: test
- リポジトリ選択→設定→フック→External Post Receive Hook
これでpushするたびにRedmineのGitリポジトリが更新されるようになりました。
コメントにrefs #nnnとかけばチケットにリンクも出来ます。リンクされるのはRedmineサーバのローカルリポジトリなのでちょっと残念です。Stashのリポジトリを見るほうが見やすくていいんですけどね。