Musisz ograniczyć dostęp do wszystkich baz danych i zapewniać programistom dostęp do lokalnej bazy danych (tam, gdzie one się rozwijają) i do serwera deweloperskiego, gdzie mogą wykonywać integrację. Najlepiej byłoby, gdyby mieli oni lokalnie dostęp do lokalnego środowiska programistycznego i wykonywali zadania integracyjne za pomocą zautomatyzowanej kompilacji. Możesz użyć narzędzi takich jak redgates sql porównać, aby zrobić różnice w bazach danych.Sugeruję, aby zachować wszystkie zmiany pod kontrolą kodu źródłowego (pliki .sql), dzięki czemu będziesz mieć historię, kto zrobił co, kiedy i jak możesz w razie potrzeby przywrócić zmiany db.
Chciałbym również mieć możliwość uruchomienia przez programistów lokalnego skryptu kompilacji, aby ponownie zainicjować lokalną skrzynkę dev. W ten sposób zawsze mogą się wycofać. Co ważniejsze, mogą tworzyć testy integracyjne, które testują instalacje aplikacji (repozytorium i dostęp do danych) i logikę ukrytą w przechowywanej procedurze w sposób zautomatyzowany. Zainicjowana jest inicjalizacja (resetowanie bazy danych), testy integracyjne są uruchamiane (tworzenie fluff w db), reinicjalizacja, aby przywrócić db do stanu czyszczenia, itp.
Jeśli jesteś użytkownikiem SVN/Nant Style (lub podobnym) z Koncepcja pojedynczego oddziału w twoim repozytorium, możesz przeczytać moje artykuły na ten temat w DotNetSlackers: http://dotnetslackers.com/articles/aspnet/Building-a-StackOverflow-inspired-Knowledge-Exchange-Build-automation-with-NAnt.aspx i http://dotnetslackers.com/articles/aspnet/Building-a-StackOverflow-inspired-Knowledge-Exchange-Continuous-integration-with-CruiseControl-NET.aspx.
Jeśli jesteś wielorodzajowym rodzajem build master, musisz poczekać, aż napiszę coś o tym rodzaju automatyzacji i zarządzania konfiguracją.
UPDATE
@Sazug: „Tak, możemy użyć jakiegoś wielu gałęzi buduje gdy używamy scenariusz bazowy + dodatkowe skrypty :) jakichkolwiek podstawowych wskazówek dotyczących tego rodzaju automatyzacji bez pełnego artykułu” Są to najczęściej dwa rodzaje baz danych:
- kontrolować db w nowym środowisku typu non-produkcyjna (tylko aktywne dev)
- środowisko produkcyjne gdzie masz dane żywo gromadzeniu się jak rozwijać
Pierwsza konfiguracja jest o wiele łatwiejsza i może być w pełni zautomatyzowana, od dev do prod i do ewentualnego wycofania wtyczki. Do tego potrzebny jest po prostu folder skryptów, w którym każda modyfikacja bazy danych może być przechowywana w pliku .sql. Nie sugeruję, że zachowujesz plik tablename.sql, a następnie wersję taką, jak plik .cs, w którym aktualizacje tego artefaktu sql są z czasem modyfikowane w tym samym pliku. Biorąc pod uwagę, że obiekty sql są tak mocno zależne od siebie nawzajem. Gdy tworzysz bazę danych od podstaw, twoje skrypty mogą napotkać przełomową zmianę. Z tego powodu sugeruję, aby zachować oddzielny i nowy plik dla każdej modyfikacji z numerem kolejnym na początku nazwy pliku. Na przykład coś w rodzaju 000024-ModifiedAccountsTable.sql. Następnie możesz użyć zadania niestandardowego lub czegoś z NAntContrib lub bezpośredniego wykonania jednego z wielu narzędzi wiersza poleceń SQL.EXE, aby uruchomić wszystkie skrypty przeciwko pustej bazie danych od 000001-fileName.sql do ostatniego pliku w folderze updateScripts. Wszystkie te skrypty są następnie rejestrowane do kontroli wersji. A ponieważ zawsze zaczynasz od czystego db, zawsze możesz wycofać, jeśli ktoś inny niszczy kompilację.
W drugiej automatyzacji środowiska nie zawsze jest najlepszą drogą, ponieważ może wpłynąć na produkcję. Jeśli aktywnie pracujesz przeciwko/dla środowiska produkcyjnego, naprawdę potrzebujesz wielobranżowego/środowiska, abyś mógł przetestować swój sposób automatyzacji zanim zaczniesz naciskać na środowisko prod. Możesz użyć tych samych pojęć, które podano powyżej. Jednak nie można tak naprawdę zacząć od zera na prod dB i wycofywanie jest trudniejsze. Z tego powodu sugeruję użycie RedGate SQL Porównaj podobne w twoim procesie kompilacji. Skrypty .sql są sprawdzane w celu aktualizacji, ale trzeba zautomatyzować różnice między bazą danych i bazą danych prod db przed uruchomieniem aktualizacji. Następnie możesz próbować zsynchronizować zmiany i wycofać prod, jeśli wystąpią problemy. Przed automatycznym wprowadzaniem zmian sql należy wykonać kopię zapasową. Zachowaj ostrożność, wykonując cokolwiek bez czujnego ludzkiego oka podczas produkcji! Jeśli wykonasz prawdziwą, ciągłą integrację we wszystkich środowiskach dev/qual/stage/performance, a następnie wykonasz kilka ręcznych czynności, gdy będziesz naciskać na produkcję ... to naprawdę nie jest takie złe!
Używam DbGhost przez 10 lat i nigdy mnie nie zawiodą. Wsparcie, które zapewniają, nie ma sobie równych. – penderi