Scrapdiary

DesigningとEngineeringの架け橋

Subversionで公開Webサーバと社内リポジトリ間のデプロイ管理

目的

外部公開されているWebサーバ(本環境)と社内リポジトリの整合性を取ることを目的に、両サーバ間をSubversionSVN*1を使って同期させることを目指していました。当初はシームレスなステージングと本環境環境の構築が懸案だったのですが、「そこまでのマイルストーンとして第一歩を記そう」というのが動機です。「運用を任されてはいるが顧客側でもコンテンツを更新する」ということが問題になりそうだったので、今回解決したいのは以下の点。

  • 顧客側が更新した内容を把握し、自動的に社内リポジトリに反映させたい。
  • 本環境へのデプロイツールとして、社内リポジトリを活用したい。

現状

インフラ部分で件がありましたが、裏セグメントとIP-VPNiDC⇔社内間の問題を回避することに成功。残すはSVNで予想するようなツールが構築できるかということろ。shellscriptで処理をまとめてcornで自動的に処理させたり、必要に応じてコマンドを叩くか、Perlなどでインターフェースを作るか・・・など最終的には比較的誰でも扱える or 存在を気にしないようにするのが目標。

検証

まずはコマンドラインから検証をしてみました。普段、自身のPCではTotoriseSVNを使っているのでコマンドラインからの利用を憶えるところからのスタートです。

ヘルプを表示 (help)
$ svn help

何はともあれ、まずヘルプから。個別コマンドの詳細ヘルプを表示するには、上記に続いてコマンド名を指定する。

$ svn help command

各コマンドのより詳細な情報が得られます。指定できるオプションなどもこれで確認可能。

チェックアウト (checkout[co])
$ svn chekcout http://www.example.com/repository/path ./workspace

checkoutは「co」という略でもOK。こういうショートカット的な指定は他にもあります。
接続先の対象リポジトリbasic認証がかかっている場合、対話インターフェースが立ち上がり、ユーザ名とパスワードを求められます。スクリプトにまとめる場合には「--username」と「--password」オプションを使う。

$ svn chekcout http://www.example.com/repository/path ./workspace --username USERNAME --password PASSWORD

一度認証に成功すると、認証情報がホームディレクトリ直下 ~/.subversion/auth/svn.simple 以下にファイルとして保存される。認証情報を保存したくない場合は「--no-auth-cache」というオプションを付加する必要がある。

アップデート (update)
$ svn update ./workspace

衝突の発生を防ぐために、コミットする前には必ずupdateを実施する。

コミット (commit[ci])
$ svn commit ./workspace --masseage 'ここにコミットログを記載'

--masseage(-m)」オプションを指定しておくと、それがそのままコミットログとしてリポジトリに反映される。指定しない場合はエディタを立ち上げてコミットログを入力するように求められる。この場合はEDITOR環境変数を設定しておく必要があるよう。

追加 (add)
$ svn add ./workspace/newfile

指定したPATH以下で、「--force」オプションを指定。ただし、コマンドをSVN管理下のディレクトリで実行する必要がある。

$ cd ./workspace
$ svn add ./ --force
元に戻す (revert)
$ svn revert ./workspace/newfile

再帰的にディレクトリ・ファイルを一括で追加する場合は「--recursive(-R)」オプションを指定。

$ svn revert ./workspace/ --recursive

課題

実際に検証していると、事前には気付かなかった問題点が浮かんできた。やはり自動化すると衝突した時のリスクがありそうだ。やはり完全な自動化は難しいかもしれない。適宜手動でupdate・commitする必要がありそう。また、リポジトリをbrunchして本環境用とテスト用に分ける事も検討していきたい。

*1:Webサーバ側のVersionは1.4.2