Trochę skomplikowane do opisania, ale zrobię co w mojej mocy. Zasadniczo używamy przepływu pracy Git, co oznacza, że mamy następujące oddziały:Jak obsługiwać wiele skryptów zmiany db pochodzących z różnych gałęzi funkcji Git?
- produkcja, która jest branżą na żywo. Wszystko odbywa się w żywym środowisku sieciowym.
- integracja, w której zintegrowana jest cała nowa funkcjonalność. Ten oddział jest co tydzień łączony z produkcją.
- jedno lub więcej oddziałów funkcji, w których programiści lub zespoły programistów opracowują nowe funkcje. Po zakończeniu tego procesu programiści łączą swoją gałąź funkcji z integracją.
Nic tak naprawdę nie jest tutaj skomplikowane. Ale ponieważ nasza aplikacja jest aplikacją działającą na bazie MySQL, nowa funkcjonalność często wymaga zmian w schemacie bazy danych. Aby zautomatyzować to, używamy dbdeploy, który pozwala nam tworzyć skrypty zmian, podając liczbę. Na przykład. 00001.sql, 00002.sql, itp. Po połączeniu z gałęzią integracji, dbdeploy sprawdzi, które skrypty zmian mają numer wyższy niż ostatnio wykonany w tej konkretnej bazie danych, i wykona je.
Teraz należy przyjąć następujące. - integracja zawiera skrypty do 00200.sql. Wszystkie one są wykonywane w integracyjnej bazie danych. - programista John ma funkcję featureX, która została utworzona, gdy integracja nadal zawierała 00199.sql jako najwyższy skrypt zmian.
John tworzy 00200.sql z powodu pewnych wymaganych zmian schematu bazy danych.
Teraz, w pewnym momencie John połączy swoje modyfikacje z powrotem w gałęzi integracji. John dostanie konflikt łączący i zobaczy, że jego 00200.sql już istnieje w integracji. Oznacza to, że musi otworzyć plik będący w konflikcie, wyodrębnić jego zawartość, zresetować ten plik z powrotem do "kopalni" (stan oryginalny jak w integracji) i umieścić własną zawartość w nowym pliku.
Teraz, ponieważ pracujemy z dziesięcioma programistami, codziennie otrzymujemy tę sytuację. I chociaż rozumiemy powody tego, czasami jest to bardzo kłopotliwe. John zmienia nazwę swojego skryptu, scala się z integracją, przesuwa zmiany w górę, aby zobaczyć, że ktoś inny stworzył już 00201.sql, co wymaga od Johna powtórzenia procesu.
Na pewno musi być więcej zespołów korzystających z przepływu pracy Git i korzystanie z narzędzia do zarządzania zmianami bazy danych do automatyzacji zmian schematów bazy danych?
Więc, krótko mówiąc, moje pytania są następujące:
- Jak zautomatyzować zmiany schematu bazy danych, podczas pracy na różnych oddziałach fabularnych, które działają na różnych instancji tego samego db?
- Jak zapobiegać konflikty seryjne przez cały czas, nadal mając opcję ustalonej kolejności w wykonanych skryptach zmian? Na przykład. 00199.sql musi być wykonane przed 00200.sql, ponieważ 00200.sql może zależeć od czegoś wykonanego w 00199.sql.
Wszelkie inne wskazówki są mile widziane.
Przydatna i podchwytliwa dyskusja, na pewno. Deweloperzy oprogramowania, zauważcie. Śledzenie zmian schematów, o czym świadczy OP, naprawdę zależy od tego, jakiego rodzaju zasięg oczekuje się od wysiłku w pierwszej kolejności. Chcesz mieć codzienną kompilację? Wersja? Punkty odzyskiwania? Kodowanie obronne? Rozwiązania będą się różnić w wyniku. –