LoginSignup
2
1

More than 5 years have passed since last update.

USVN hook (post-commit: auto deploy)

Posted at

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にシムリンクをはるなどする

References

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1