Przeprowadziliśmy migrację wielu kodów źródłowych do git i jesteśmy bardzo zadowoleni z naszego obecnego rozwiązania. Chcielibyśmy, aby nasze pliki konfiguracyjne serwera były wersjonowane w tym samym systemie, ale jest kilka rzeczy, które nie działają tak, jak byśmy tego chcieli i mam nadzieję, że ktoś może podzielić się z nim swoimi doświadczeniami.
To pytanie jest podobne do korzystania z kontroli wersji plików konfiguracyjnych serwera? , ale mamy specjalne wymagania, które nie działają z sugestiami dotyczącymi tego pytania.
Obecna konfiguracja używa subversion do plików konfiguracyjnych. Odpowiednie repozytorium wygląda mniej więcej tak
/ # root repozytorium + - www.domain.com/ # konfiguracja dla www | \--itp/ | \ - apache2 / + - dev.domain.com/ # konfiguracja dla dev | + - etc / | \--optować/ | \ - app1 / | \ - conf / # konfiguracja dla app1 na dev \ - staging.domain.com/ # konfiguracja do przemieszczania
Z subversion działałoby to dobrze, ponieważ możliwe jest po prostu pobranie podkatalogu repozytorium. Ponadto można użyć svn: externals, aby wskazać jedną wspólną strukturę dla kilku różnych konfiguracji. Musieliśmy mieć do czynienia tylko z plikami .svn we wszystkich wersjonowanych katalogach. Z drugiej strony Git nie ma svn: zewnętrzne i rzadkie kasy zawsze wymagają, aby ścieżka z katalogu głównego do rzeczywistego katalogu była taka sama.
Omawiając migrację do git, próbowałem zapisać główne wymagania dotyczące wersji konfiguracji serwera:
- chcemy tylko jednego repozytorium
- powinno być możliwe łatwe wprowadzanie zmian do centralnego pilota
- zestawy zmian powinny zawierać prawdziwego autora
Czy istnieje dobry sposób, aby mieć całą konfigurację w jednym repozytorium i mieć tylko ścieżkę pomocniczą jako kopię roboczą? Obecnie rozważam dwa podejścia, ale najpierw chciałem zadać to pytanie
- Jeśli repozytorium .git znajduje się w stałej lokalizacji, np. Gdzieś w / var , możemy połączyć się z pod ścieżką z katalogu roboczego „docelowego”. Główny problem: nie wiedziałbym o sposobie „linkowania” z / etc do innego katalogu w celu importowania tylko zawartości, z wyjątkiem symlinkowania pojedynczych plików
- Znalazłem inną alternatywę dla tego pytania SO , sugerując posiadanie wielu oddziałów w jednym repozytorium. Z pewnością zwiększyłoby to złożoność, ale widziałem, jak próbujemy w ten sposób.
Używanie git na jednym komputerze do zarządzania plikami konfiguracyjnymi działa dobrze, ale uważam, że musi być ktoś, kto używa go w sposób, w jaki chcielibyśmy go używać.
Dziękuję
Kariem
źródło
/
powodu uprawnień do zapisu.On a new machine, clone the git repo and check out the branch for that machine type
. Czy mogę uniemożliwić dostęp do innych oddziałów (ze względów bezpieczeństwa)?Trochę nubu tutaj, ale wygląda na to, że hak odbierania postów mógłby wykonać zadanie
Repo master jest przechowywany w / var / master,
hak klonuje go do / var / localclone,
a następnie kopiuje dane specyficzne dla hosta
Konieczne byłoby skonfigurowanie haka .git / post-receive lokalnie na każdym serwerze (z odpowiednimi ustawieniami)
Wygląda na to, że chcesz czegoś bardziej podobnego do marionetki lub szefa kuchni niż git. Pozwoli to uruchomić git, aby centralnie zarządzać konfiguracjami i modułami, a puppet \ chef zarządza wdrażaniem i weryfikacją dla ciebie
źródło
oto krótka praca, o której pomyślałem:
1. Miej centralne repozytorium w powiedzmy
/var/repo
2. Umieść pliki globalne we wszystkich domenach w tym katalogu.
3. Tworzenie oddziałów dla każdej subdomeny
/var/repo/subdomain1
,/var/repo/subdomain2
itd.4. Tworzenie hak pocztowy, gdzie każdy push gałęzi jest połączona z mastera.
Kiedy więc zmienisz konfigurację
/var/repo/subdomain2
, jest ona natychmiast łączona z masterem, dzięki czemu możesz całkowicie pobrać repo i mieć wszystkie pliki konfiguracyjne.Jeśli chcesz pobrać pojedyncze konfiguracje subdomen, po prostu pociągnij odpowiednią gałąź.
Jak wkładasz pliki konfiguracyjne,
/var/repo/*
to zupełnie inna sprawa (zakładki cron, mogę wymyślić)~ $
źródło