バックグラウンド
私は、約4人のプログラマーと4人のデザイナーから成る小規模なWebチーム向けに新しい開発プロセスの作成に取り組んでいます。将来的にチームを成長させる可能性があることは明らかです。当社の製品は、当社が設計およびホストするクライアントWebサイトを強化する中央アプリケーションです。
以前は、1つの開発データベースを使用して、開発サーバーでFTPを介して作業していました。それは「働いた」*私たちのプロセスを成熟する時間ですので、しばらくの間、私たちは新たな方向に動いています。
Percona Server 5.5を使用していますが、これはデータベースにとらわれず、コストを低く抑えることを考えたものでなければなりません。
目標:
私は、以下を念頭に置いて、データベース開発のための継続的インテグレーション(CI)プロセスの作成を検討しています。
- 開発者には、開発コードを実行するためのデータのローカルコピーがあります
- データベース構造を以前の変更セットにロールバックできる
- 新機能スキーマの変更とスキーマ設計修正の変更を区別できる
- テストのためにデータベース構造をローカルで変更可能
初期コンセプト
SVNとLiquiBaseを使用して以下のプロセスをスケッチしましたが、完全に削除され#4
ます。
- トランクから「開発」ブランチを作成する
- 中央の「開発」データベースサーバーは「開発」ブランチから実行されます
- ローカル開発者は、開発ブランチのスレーブとしてセットアップされます(
#1
上記を提供)- LiquiBaseをチェンジは(この開発サーバーへのスレーブとして動作しているローカルマシンにトリクルダウンします)中央開発用データベースを更新するために、ポストcommitフックを実行する開発ブランチに定期的にコミットしている(LiquiBaseをが提供する
#2
上で)- 機能またはスキーマの修正がQAに進む準備ができたら、DBA(me)は開発ブランチからトランクに適切な変更をマージします。この行為は、ステージングデータベースサーバーに適用するSQLスクリプトを作成します。
- ステージングサーバーはTRUNKを反映する必要があります。TRUNKは、本番と同じ構造に加えて、QAにある変更を含む必要があります
- ステージングサーバーでsqlスクリプトを実行した後、変更に対していくつかのQAを実行します。
- すべてが正常に見える場合は、構造にタグを付けます。これにより、DBAによって本番環境で手動で実行される.sqlスクリプトが生成されます(必要に応じてオフピーク時間)。
このプロセスでは、すべての開発者が同じ「開発」ブランチから実行する必要があります。つまり、データベーススキーマのバージョンは常に1つだけです(これが必要かどうかはわかりません)。
また、スキーマへの変更はローカルでテストできず、正しく行わないと他の開発者に影響を与える可能性があります。この環境では、開発者は新しいテーブルを追加するかもしれませんが、既存の構造を変更することはめったにありません。DBAとして、設計修正は私によって行われます。しかし、修正をローカルでテストできないことは、プロセスの最大の問題です。
上記のプロセスを微調整して、ローカル開発を可能にしながら、データの比較的最新のコピーを維持するにはどうすればよいですか(提案されたプロセスの複製によって提供されます)。先週までデータを最新にする必要はありません。
*「働いた」とは、それで十分であるが、PITAだったことを意味します。