tło
Pracuję nad stworzeniem nowego procesu rozwoju dla małego zespołu internetowego złożonego z około 4 programistów i 4 projektantów, z oczywistym potencjałem do rozwoju zespołu w przyszłości. Nasz produkt to centralna aplikacja, która zasila witryny klienckie, które również projektujemy i hostujemy.
Wcześniej wszyscy pracowaliśmy przez FTP na serwerze deweloperskim z jedną bazą danych deweloperów. Przez pewien czas „działało” * , ale zmierzamy w nowym kierunku, więc nadszedł czas, aby dojrzeć nasz proces.
Używamy Percona Server 5.5, ale powinna to być agnostyka bazy danych, z myślą o utrzymaniu niskich kosztów.
Cele :
Zastanawiam się nad stworzeniem procesu ciągłej integracji (CI) dla rozwoju bazy danych, mając na uwadze:
- Programiści mają lokalną kopię danych, na której można uruchomić kod programistyczny
- Możliwość przywrócenia struktury bazy danych do poprzedniego zestawu zmian
- Potrafi oddzielić nowe zmiany schematu funkcji od zmian poprawki projektu schematu
- Potrafi lokalnie modyfikować strukturę bazy danych do testowania
Wstępna koncepcja
Naszkicowałem proces poniżej za pomocą SVN i LiquiBase, chociaż całkowicie go usuwa #4
.
- utwórz gałąź „rozwoju” z pnia
- centralny serwer db „rozwoju” działa z gałęzi „rozwoju”
- lokalni programiści są skonfigurowani jako niewolnicy gałęzi programistycznej (
#1
powyżej)- zestawy zmian likibase są regularnie przydzielane do gałęzi programistycznej, która wykonuje przechwycenie po zatwierdzeniu, aby zaktualizować centralną bazę danych programowania (która spłynie do lokalnych maszyn działających jako slave na tym serwerze programistycznym) (likibase zapewnia
#2
powyżej)- gdy funkcje lub poprawki schematu są gotowe do przejścia do kontroli jakości, DBA (ja) połączy odpowiednie zmiany z gałęzi programistycznej do magistrali. Ten akt spowoduje utworzenie skryptu SQL do zastosowania na pomostowym serwerze bazy danych.
- Serwer pomostowy powinien odzwierciedlać TRUNK, który powinien mieć taką samą strukturę jak Produkcja, a także zmiany w kontroli jakości
- po wykonaniu skryptu SQL na serwerze pomostowym wykonaj kontrolę jakości zmian.
- Jeśli wszystko wygląda dobrze, TAGUJ strukturę. Spowoduje to wygenerowanie skryptu .sql do ręcznego uruchomienia w środowisku produkcyjnym przez DBA (w razie potrzeby poza godzinami szczytu)
Ten proces wymaga, aby wszyscy programiści uruchomili tę samą gałąź „rozwoju”, co oznacza, że w danym momencie istnieje tylko jedna wersja schematu bazy danych (nie jestem pewien, czy tego chcę).
Oznacza to również, że wszelkie zmiany w schemacie nie mogą być testowane lokalnie i mogą mieć wpływ na innych programistów, jeśli nie zostaną wykonane prawidłowo. W naszym środowisku programiści mogą dodawać nowe tabele, ale rzadko modyfikują istniejącą strukturę. Jako DBA poprawki projektowe są wykonywane przeze mnie. Ale niemożność testowania poprawek lokalnie jest moim największym zawieszeniem tego procesu.
W jaki sposób można zmodyfikować powyższy proces, aby umożliwić rozwój lokalny, przy jednoczesnym zachowaniu stosunkowo aktualnej kopii danych (zgodnie z replikacją w moim proponowanym procesie)? Nie wymagam, aby dane były aktualne nawet do ostatniego tygodnia.
* Przez „pracował” mam na myśli, że wystarczyło, ale był PITA.