2012-02-29 6 views
21

最近、私たちが取り組んでいるストーリーごとにフィーチャーブランチを使用するようになりました。これらは可能な限り独立しており、プロジェクトマネージャーはどのストーリーがリリースを構成するかを決定します。これは、物語が最初に生産に入る正確な順序を知っていることを意味します。フィーチャーブランチで作業する場合のフライウェイの使用方法

Flywayでこれを処理する標準的な方法はありますか?私は、本番データベースへの変更がどのようにリニアで正しいのかを説明するFAQを読んでいます。しかし、チームメンバーが機能ブランチで作業している間にどのバージョン番号をマイグレーションするかを決める方法がわかりません。また、リリース前に統合ブランチとマスターにマージするときに、マイグレーションファイルの名前を手動で変更する必要があります。

+0

「バージョン番号」には、日付と時刻のスタンプを使用できます。これを単純にするには、多分スクリプトのサポートが必要です。 –

+1

すべての移行を一度に適用しようとすると、競合が発生する可能性があります。ソースコードにも矛盾があるかもしれません。だから、リリースの準備を始めるときに、このすべてのものを見つけ出すの一環としてマイグレーションの名前を変更してください。参照してください:http://stackoverflow.com/questions/888414/git-checkout-older-revision-of-a-file-under-a-new-name –

答えて

19

あなたが取得するのと同じバージョン番号の移行scrtipts持つことはできません。ここで

:バージョン 'XYZ'(SQL ...犯罪者)と複数のマイグレーションを発見

を複数の開発者が同じバージョンで作業している、つまり1.0だが異なる機能については私が提案する回避策です。私はFOO-16のように、各issueにIDを追加する問題トラッカーを使用していると思います。開発者がその問題を処理する場合、移行スクリプトはV1.0.16__my_greatest_feature.sqlと呼ばれます。この方法(各機能/ブランチには独自の問題があると仮定します)では、衝突はありません。

また、私はデータベース移行スクリプトが独立していて重複していないと仮定していますが、そうでない場合は、すべてを安定版リリースにマージする際に問題が発生します。

ですから、ギャップのいくつかの移行スクリプトを持っている安定版リリース、例えば中:V1.0.16V1.0.27V1.0.101FOO-16FOO-27FOO-101が選択された場合) - フライウェイは気にしません。安定版にすることができなかった機能1.0(たとえばV1.0.35)は、次のメジャーリリース(たとえばV1.1.35)をターゲットにするために名前を変更する必要があります。

+3

これらの機能ブランチが別々の時点で開発ブランチにマージされるとどうなるでしょうか? 。フィーチャー101が後にマージされて27の前に適用された場合、フライウェイは番号が小さいことに不平を言うので、もう27を適用することはできません。 – T3rm1

+1

アウトオブオーダー処理を有効にする必要があります(https://flywaydb.org/documentation/commandline/migrateを参照)。 –

15

私はoutOfOrderを有効にして、デフォルトでは、バージョン番号

としてタイムスタンプを使用するブランチ間のバージョン管理の問題を克服するために見ているの最善の方法は、ほとんどの移行フレームワークは、前述したように、整数との個別の移行の前に付けることを選択します以下の例では、フレームワークが現在のデータベースにまだ適用されていない移行を検出すると、データベースに接頭辞が存在しない最初の移行から開始し、昇順で適用します。

  • 1.0.0.1__add_customers_table.sql
  • 1.0.0.2__add_email_address_column_to_customers_table.sql
  • 1.0.0.3__add_orders_table_with_reference_to_customer_table.sql

誰もがコードの同じ枝上にあるとき、これは素晴らしい作品。ただし、チームのメンバーが自分の支店で作業を開始すると、プレフィックスの衝突の可能性が劇的に増加します。

ただし、整数ではなくタイムスタンプを使用して移行のプレフィックスを設定すると、ブランチを越えても衝突の可能性は事実上消えます。例えば、yyyyMMddHHmmssSSSなどようなパターンを使用して、今以上の移行は

  • 1.0.0.20130704144750766__add_customers_table.sql
  • 1.0.0.20130706132142244__add_email_address_column_to_customers_table.sql
  • 1.0.0.20130706151409978__add_orders_table_with_reference_to_customer_table.sql
  • ...のように見えます

上記のタイムスタンプパターンはミリ秒まで正確です。非常に正確なタイムスタンプは接頭辞を読みにくくする可能性がありますが、接頭辞をより正確に指定すれば衝突は少なくなります。

は、最良の結果を得るために、あなたは、ので、あなたのチームのすべてのメンバーが一貫性のあるフォーマットに加えて

を使用しているこのタイムスタンプの作成を自動化するフライウェイも整数として、タイムスタンププレフィックスを扱うことに注意したいと思うでしょう。これは、もともとFlywayで整数を使用して作業を開始した場合でも、いつでもタイムスタンプに切り替えることができることを意味します。タイムスタンプは非常に大きな整数なので、最初のタイムスタンプ接頭辞は、最後の整数接頭辞の後に適用されます。

はここから撮影し、わずかに変更された:http://www.jeremyjarrell.com/using-flyway-db-with-distributed-version-control/

0

バージョンは良い考えのようだとして、タイムスタンプを使用します。私が見る問題は、チームが世界中に広がっているときだけです。その場合、標準として1つのタイムゾーンを選択する必要があります。

関連する問題