DoltengとMaven2とSubversionの連携(5-2)

アジャイルプロセスにおける、データベース設計及び構成管理の必要性を受けて、前に掲載した「サーバ構成図」をもう少し発展させてみた。

mavenによって、DB構成(スキーマ+データ)を、データベースに反映させる(図において、点線矢印で示した操作)ことはできるのだろうか…、と思いながら書いてみました。

それができれば、以下の手順で、DB構成をSubversionに管理させることができますね。

開発者の作業

  1. 開発者は、リポジトリから「ソースコード」と「DB構成データ」をチェックアウトする。
  2. mavenで依存jarを解決する時、同時に、ローカルDBに「DB構成データ」を反映させる。
  3. DB構成変更を加える時は、必ず「DB構成データ」経由で行う。ローカルDBを直接変更しない。
  4. 変更した「ソースコード」と「DB構成データ」をコミットする。

継続的インテグレーション

  1. 開発環境サーバのContinuumは、定時になるとリポジトリから最新の構成をチェックアウトする。
  2. ソースコード」をビルドし、ステージングサーバにデプロイする。
  3. 「DB構成データ」を、ステージングデータベースサーバに反映させる。

さて。mavenPostgreSQLのDB構成を変更するにはどうしたら…。pg_dumpとか使うかなぁ。

自作のタスク(ゴール?)なんて作った事ないです…。シェルコマンド実行できるだけで良いんだけどな〜。どうしたら良いのだろうか。

developサーバにて、プロジェクトを作成するシェルスクリプト

projectadd.sh

#!/bin/sh

if [ $# != 3 ]
then
  echo "Usage: $0 <project_name> <user_name> <password>"
  exit 1
fi

PROJECT_NAME=$1
SVN_DIR=/var/svn/${PROJECT_NAME}
TRAC_DIR=/var/trac/${PROJECT_NAME}

if [ -f ${SVN_DIR} ]
then
  echo "Directory ${SVN_DIR} already exists. Please remove it and try again."
  exit 1
fi

if [ -f ${TRAC_DIR} ]
then
  echo "Directory ${TRAC_DIR} already exists. Please remove it and try again."
  exit 1
fi

# create Subversion repository

mkdir ${SVN_DIR}
svnadmin create --fs-type=fsfs ${SVN_DIR}
chown -R apache:apache ${SVN_DIR}

cp ${SVN_DIR}/conf/svnserve.conf ${SVN_DIR}/conf/svnserve.conf.ORG
cat >> ${SVN_DIR}/conf/svnserve.conf <<EOF
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz
realm = ${PROJECT_NAME} Repository
EOF

cp ${SVN_DIR}/conf/passwd ${SVN_DIR}/conf/passwd.ORG
echo "$2 = $3" >>${SVN_DIR}/conf/passwd
chmod 600 ${SVN_DIR}/conf/passwd

cp ${SVN_DIR}/conf/authz ${SVN_DIR}/conf/authz.ORG
cat >>${SVN_DIR}/conf/authz <<EOF
[groups]
manager = $2
developer = $2
[/]
* = r

[${PROJECT_NAME}:/]
@manager = rw

[${PROJECT_NAME}:/tags]
@manager = rw

[${PROJECT_NAME}:/branches]
@developer = rw

[${PROJECT_NAME}:/trunk]
@developer = rw
EOF

svn mkdir file://${SVN_DIR}/trunk file://${SVN_DIR}/tags file://${SVN_DIR}/branches -m "Create trunk, tags, branches."


# create Trac project

mkdir ${TRAC_DIR}
trac-admin ${TRAC_DIR} initenv ${PROJECT_NAME} sqlite:db/trac.db svn ${SVN_DIR} /usr/share/trac/templates

cp trac-0.10.3.1-ja-1/contrib/trac-post-commit-hook ${SVN_DIR}/hooks/
chmod +x ${SVN_DIR}/hooks/trac-post-commit-hook

cat >> ${SVN_DIR}/hooks/post-commit <<EOF
#!/bin/sh

REPOS="\$1"
REV="\$2"

export LANG=ja_JP.UTF-8

LOG=\`/usr/bin/svnlook log -r \$REV \$REPOS\`
AUTHOR=\`/user/bin/svnlook author -r \$REV \$REPOS\`

/usr/bin/python ${SVN_DIR}/hooks/trac-post-commit-hook \\
	-p "${TRAC_DIR}" \\
	-r "\$REV" \\
	-u "\$AUTHOR" \\
	-m "\$LOG"
EOF

chmod +x ${SVN_DIR}/hooks/post-commit
chown -R apache:apache ${TRAC_DIR}
chmod -R a+wr ${TRAC_DIR}

projectdel.sh

#!/bin/sh

if [ $# != 1 ]
then
  echo "Usage: $0 <project_name>"
  exit 1
fi

PROJECT_NAME=$1
SVN_DIR=/var/svn/${PROJECT_NAME}
TRAC_DIR=/var/trac/${PROJECT_NAME}

#if [ ! -f ${SVN_DIR} ]
#then
#  echo "Directory ${SVN_DIR} does not exist."
#  exit 1
#fi
#
#if [ ! -f ${TRAC_DIR} ]
#then
#  echo "Directory ${TRAC_DIR} does not exist."
#  exit 1
#fi

rm -fr ${SVN_DIR}
rm -fr ${TRAC_DIR}

ステージングサーバ(Linux仮想 - www)のセットアップ

VSC から www を起動する。起動したら、以後はVSC経由ではなく、SSH経由で作業すると楽かも。

続きを読む

Linux仮想(ステージング、開発環境、データベースサーバ共通)のセットアップ

  • VSCから、仮想マシンを1つ作り、baseと名付ける。
  • 起動し、CentOS4.4をインストールする。(SELinux無効)
  • 初期設定その他、各サーバ共通の設定。yumのレポジトリを最適化したり、yum -y updateしたりしておく。
  • SSHのポート(22)に穴をあけておく。
  • シャットダウンする。

この状態で、開発環境クライアント(Windows実機)からSamba経由で下記にアクセスすると、basicというディレクトリがある。

/var/lib/vmware/Virtual Machines

このディレクトリを丸ごとコピーして、www, develop, databaseを作成する。

[root@vmhost ~]# cp -r basic www
[root@vmhost ~]# cp -r basic develop
[root@vmhost ~]# cp -r basic database

VSC の File → Open → Browse で、コピーしたVMを認識できる。

仮想マシン制御サーバ(Linux実機 - vmhost)のセットアップ

OSとしてCentOS4.4をインストール。(SELinux無効)

初期設定

yumのレポジトリを最適化したり、yum -y updateしたりしておく。

VMWareのインストール

VMWare Serverをダウンロード(要ユーザ登録)し、インストール。
VMWare Server Console (以下VSC)からアクセスする為に、ポート902に穴をあけておく。

[root@vmhost ~]# # yumでカーネルがアップデートされないようにする。
[root@vmhost ~]# echo "exclude=kernel* kmod-nvidia* xorg-x11-drv-nvidia" >>/etc/yum.conf

[root@vmhost ~]# # インストール
[root@vmhost ~]# rpm -Uvh VMware-server-1.0.2-39867.i386.rpm
[root@vmhost ~]# vmware-config.pl
Making sure services for VMware Server are stopped.

Stopping VMware services:
   Virtual machine monitor                                 [  OK  ]

You must read and accept the End User License Agreement to continue.
Press enter to display it. 

VMWARE MASTER END USER LICENSE AGREEMENT
(略)

Do you accept? (yes/no) yes

Thank you.

Configuring fallback GTK+ 2.4 libraries.

In which directory do you want to install the mime type icons? 
[/usr/share/icons] 

What directory contains your desktop menu entry files? These files have a 
.desktop file extension. [/usr/share/applications] 

In which directory do you want to install the application's icon? 
[/usr/share/pixmaps] 

Trying to find a suitable vmmon module for your running kernel.

The module bld-2.6.9-5.EL-i686-RHEL4 loads perfectly in the running kernel.

Do you want networking for your virtual machines? (yes/no/help) [yes] 

Configuring a bridged network for vmnet0.

The following bridged networks have been defined:

. vmnet0 is bridged to eth0

All your ethernet interfaces are already bridged.

Do you want to be able to use NAT networking in your virtual machines? (yes/no)
[yes] no

Do you want to be able to use host-only networking in your virtual machines? 
[no] no

Trying to find a suitable vmnet module for your running kernel.

The module bld-2.6.9-5.EL-i686-RHEL4 loads perfectly in the running kernel.

Please specify a port for remote console connections to use [902] 

xinetd を停止中:                                           [  OK  ]
xinetd を起動中:                                           [  OK  ]
Configuring the VMware VmPerl Scripting API.

Building the VMware VmPerl Scripting API.

Using compiler "/usr/bin/gcc". Use environment variable CC to override.

Installing the VMware VmPerl Scripting API.

The installation of the VMware VmPerl Scripting API succeeded.

Generating SSL Server Certificate

In which directory do you want to keep your virtual machine files? 
[/var/lib/vmware/Virtual Machines] 

The path "/var/lib/vmware/Virtual Machines" does not exist currently. This 
program is going to create it, including needed parent directories. Is this 
what you want? [yes] 

Please enter your 20-character serial number.

Type XXXXX-XXXXX-XXXXX-XXXXX or 'Enter' to cancel:  (適宜入力)

Starting VMware services:
   Virtual machine monitor                                 [  OK  ]
   Virtual ethernet                                        [  OK  ]
   Bridged networking on /dev/vmnet0                       [  OK  ]

The configuration of VMware Server 1.0.2 build-39867 for Linux for this running
kernel completed successfully.

[root@vmhost ~]# # 常時起動
[root@vmhost ~]# chkconfig vmware on

Sambaのインストール

後々便利なので、お好みでSambaを入れておく。(scpでもいいんだけど)

[root@vmhost ~]# yum -y install samba
(略)
[root@vmhost ~]# pdbedit -a -u cepoc
new password:
retype new password:
(略)

[root@vmhost ~]# # 適宜修正
[root@vmhost ~]# vi /etc/samba/smb.conf

[root@vmhost ~]# chkconfig smb on
[root@vmhost ~]# /etc/rc.d/init.d/smb start
SMB サービスを起動中:                                      [  OK  ]
NMB サービスを起動中:                                      [  OK  ]
[root@vmhost ~]#