Domanda

Ci siamo trasferiti di recente nell'utilizzo di filiali di funzionalità per ogni storia che lavoriamo.Questi sono il più indipendenti possibile, e il nostro project manager decide quindi quali storie costituiranno una versione.Ciò significa che conosciamo l'ordine esatto in cui le storie andranno in produzione inizialmente.

C'è un modo standard per affrontare questo in Flyway?Ho letto le FAQ che discute come la modifica del database di produzione sarà lineare, che è corretta.Tuttavia non sono sicuro di come i membri del team decideranno quali numeri di versione dare le loro migrazioni mentre stanno lavorando sul loro ramo di funzionalità.Inoltre, dovremmo rinominare manualmente i file di migrazione quando ci fulliamo alla nostra filiale di integrazione e master prima del rilascio.

È stato utile?

Soluzione

Non è possibile avere migrazione Script con lo stesso numero di versione che otterrai:

.

Trovato più di una migrazione con la versione 'x.y.z' (offesers: sql ...)

Ecco una soluzione alternativa che suggerisco: più sviluppatori stanno lavorando sulla stessa versione, dicono 1.0 ma su funzionalità diverse. Immagino che tu stia utilizzando un tracker di problemi che aggiunge ID a ciascun problema, come FOO-16. Quando uno sviluppatore funziona su tale problema, lo script di migrazione è chiamato V1.0.16__my_greatest_feature.sql. In questo modo (supponendo che ogni caratteristica / ramo abbia il proprio problema) non ci sono collisioni.

Assumendo che gli script di migrazione del database siano indipendenti e non sovrapposti, ma se questo non è il caso che avrai problemi durante la fusione di tutto su un rilascio stabile.

Così in una versione stabile si dispone di diversi script di migrazione con lacune, E.G: V1.0.16, V1.0.27, V1.0.101 (se FOO-16, FOO-27 e FOO-101 sono stati scelti) - Flyway non importa. Tutte le funzionalità che non sono riuscite a una versione stabile 1.0 (ad esempio V1.0.35) deve essere rinominata per destinare la prossima versione principale (ad esempio V1.1.35).

Altri suggerimenti

Il modo migliore che ho visto per superare i problemi di controllo tra i rami per abilitare OutoForder e utilizzare un timestamp come numero di versione

Per impostazione predefinita, la maggior parte dei framework di migrazione scelgono di prefiggere le singole migrazioni con un numero intero, come nell'esempio seguente. Quando il framework incontra le migrazioni non ancora applicate al database corrente, inizia con la prima migrazione il cui prefisso non è presente nel database e inizia ad applicarli in ordine crescente.

    .
  • 1.0.0.1__ADD_CUSTORS_TABLE.SQL
  • 1.0.0.2__ADD_EMAIL_ADDRESS_COLUMN_TO_COMSUSSUMERS_TABLE.SQL
  • 1.0.0.3__ADD_ORDERS_TABLE_With_Reference_To_Customer_table.sql

    funziona alla grande quando tutti sono sullo stesso ramo del codice. Tuttavia, una volta che i membri del team iniziano a lavorare sui propri rami, la probabilità di una collisione prefisso aumenta drammaticamente.

    Ma, se si sceglie di prefissare le migrazioni utilizzando i timestamp piuttosto che interi, quindi la probabilità di collisione scompare virtualmente, anche attraverso i rami. Ad esempio, usando un modello come Yyyymmmddhhmsssssss Le migrazioni sopra ora sembrano ...

      .
    • 1.0.0.20130704144750766__ADD_CUSTOMERS_TABLE.SQL
    • 1.0.0.20130706132142244__ADD_EMAIL_ADDRESS_COLUMN_TO_CUSTORS_TABLE.SQL
    • 1.0.0.20130706151409978__ADD_ORDERS_TABLE_WITH_REFERENCE_TO_CUSTOMER_TABLE.SQL

      Il motivo del timestamp sopra è preciso fino al millisecondo. Mentre un timestamp altamente preciso può portare a prefissi difficili da leggere, più preciso è il prefisso, quindi meno probabilmente una collisione sarà.

      Per i migliori risultati, vorrai automatizzare la creazione di questo timestamp in modo che tutti i membri del tuo team stiano usando un formato coerente

      Inoltre, si noti che Flyway tratta anche i prefissi timestamp come numeri interi. Ciò significa che se inizialmente inizi a lavorare con Flyway utilizzando I numeri interi quindi puoi ancora passare a Timestamps in qualsiasi momento. Poiché i timestamp sono solo numeri interi molto grandi, la prima migrazione prefissata timestamp sarà semplicemente applicata dopo l'ultima migrazione prefissata integer.

      Preso da qui e leggermente modificato: http:// www.jeremyjarrell.com/using-flyway-db-with-distribuit-version-control/

Usando un timestamp come una versione sembra essere una buona idea.Solo problema che vedo è quando la squadra è diffusa in tutto il mondo.In tal caso potremmo scegliere un timezone come standard.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top