Goal
* USVNで管理されたsvnリポジトリにコミットがあったタイミングで、svnコードを自動updateしてサービスのテスト環境に自動デプロイする
* USVN稼働サーバとサービステスト環境稼働サーバは別ホストとしたい
Milestone
* USVNで管理されたsvnリポジトリのhookスクリプトを起動するユーザは、Apacheの実行ユーザ(自分の環境の場合daemon)になる
* daemonユーザは、nologin属性がついており通常ログインする用のユーザとして作られていない(suもできない)
* hookが動いてから、別のホストへコミットを通知する方法はいろいろあると思うが、シンプルにsshでコマンドを送信することにする
* deploy用のユーザを新たに、デプロイ対象サーバとUSVN管理サーバの両方に作成する
* 2サーバ間を標準入力無しで移動可能にするため、ssh認証キーを作成する
* daemonユーザ(hookスクリプトの実行ユーザ)がdeployユーザにsuできる権限を付与する
Manual
post-commitスクリプトをリポジトリのhook下に配置
## -------------------------
## root@USVN管理ホスト
## -------------------------
grep 'subversion.path' {USVNのインストールパス}/config/config.ini
# subversion.path = "/usr/local/services/usvn-1.0.7/files/"
ls -l /usr/local/services/usvn-1.0.7/files/svn/sample_repos/hook
# このhook以下に以下のスクリプトをpost-commitという名前で配置
post-commit
SUDO=/usr/bin/sudo
SU=/bin/su
SSH=/usr/bin/ssh
USER='deploy_user'
HOST='deploy_target_host'
PATH='{svnチェックアウト用のパス}/sample_repos'
$SUDO $SU $USER -c "$SSH ${USER}@${HOST} \"cd ${PATH}; svn update\""
ssh key Generation
## -------------------------
## deploy_user@USVN管理ホスト
## -------------------------
ssh-keygen -t rsa
# ~/.ssh/id_rsa, pass phraseなしでキーペアを作成
## -------------------------
## deploy_user@デプロイ対象ホスト
## -------------------------
mkdir -p -m 700 ~/.ssh
echo "{さきほど作成したid_rsa.pubの中身}" >> ~/.ssh/authorized_keys
chmod 700 ~/.ssh/authorized_keys
## -------------------------
## deploy_user@USVN管理ホスト
## -------------------------
ssh deploy_user@デプロイ対象ホスト
# nopassでログインできるようになったことを確認
sudo Setting
## -------------------------
## root@USVN管理ホスト
## -------------------------
visudo
# 以下の設定を追加する
# * requirettyをコメントアウト
# これをコメントアウトしないとsudo sshを併用できない
# * daemonがnopassでsu deploy_userが実行できるように設定
# 最後の*はオプション付きのsuコマンドを許可するため
#Defaults requiretty
daemon ALL=(ALL) NOPASSWD: /bin/su deploy_user*
デプロイ対象サーバでsvn checkoutディレクトリを用意
* svnをチェックアウトするようのディレクトリを作成してチェックアウト
* Apache document rootにシムリンクをはるなどする