RedmineのリポジトリにStashのリポジトリを表示させる #2

StashとRedmineを連携させるの続き

  • 前回は、公開リポジトリなので上手くいっていたのですがやはり非公開リポジトリでは中途半端に動作してhookのスクリプトが途中で止まっていました。
    • おそらくユーザ名とパスワードが聞かれるところで止まってプロセスが残り続けていたと思われます。_| ̄|○
    • やはりちゃんとやらないといけないということで、sshの公開鍵をStashに登録してやるように修正しました。

sshキーペアを作成して、登録する

  • まずRedmineサーバへsshしているユーザで秘密鍵と公開鍵のペアを作ります。
    • 途中でパスフレーズを聞かれますが、エンターを叩いて無しにします。
$ ssh-keygen -t rsa git_key
  • 公開鍵を登録します。
$ cat ~/.ssh/git_key.pub
ssh-rsa AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAA== user@host
  • このキーをStashに登録するのですが、プロジェクトやリポジトリ単位でやるのは面倒なので、私のユーザでアカウント管理からSSHキーの画面を開き、キーの追加で登録しました。

Redmineサーバでスクリプトが動作するときに作成した秘密鍵が使われるように設定する

  • ユーザ毎にsshのデフォルト設定を作れます。
$ vi ~/.ssh/config
Host git.example.com
    HostName git.example.com
    IdentityFile ~/.ssh/git_key
    User git
  • 初回はauthorized_keysに登録するか聞いてくるのでsshでアクセスしてみましょう。

Hook Scriptを修正

  • git cloneしているところをhttpからsshに変えます。
#!/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 ssh://git@git.example.com:7999/$PROJECT/$REPO_NAME
fi
cd $REPO_DIR
git fetch --all
exit
EOF
) | tee /tmp/git-mirror.log

これで非公開リポジトリにも対応出来ました。