Jak stosujesz praktyki programistyczne, takie jak kontrola wersji, testowanie i ciągła integracja / wdrażanie do administracji systemem?

18

Wyobraź sobie, że będziesz zarządzać wieloma serwerami za pomocą różnych usług, z których korzysta wiele osób. Teraz powiedz, że chcesz zmienić konfigurację lub wymienić oprogramowanie na jednym z tych serwerów. Oczywiście nie chcesz pracować na serwerach, które są w produkcji.

Gdyby to była zmiana kodu, jako programista dokonałbym tej zmiany na moim lokalnym komputerze programistycznym, przetestowałby ją lokalnie i zatwierdziłby zmiany w systemie kontroli wersji. Zmiany można następnie wdrożyć w środowisku pomostowym, przetestować dalej i ostatecznie wdrożyć w środowisku produkcyjnym. W razie potrzeby łatwo byłoby mi się wycofać.

Ogólnie, a konkretnie, jak to osiągnąć w administracji systemu?

(Pierwszą rzeczą, jaka przychodzi mi na myśl, jest używanie maszyn wirtualnych i umieszczanie obrazów maszyn wirtualnych w kontroli wersji, ale jestem pewien, że jest dużo literatury i sprytnych rozwiązań, o których obecnie nie wiem).

arex1337
źródło
Czy pytasz o narzędzia techniczne lub ramy do zarządzania tego rodzaju rzeczami? Ponieważ trudno byłoby mówić o tej drugiej opcji bez wspominania o zarządzaniu zmianami i wydaniami z branży ITIL.
Rob Moir,
@ DJPon3 Chciałbym wiedzieć o ogólnym podejściu (jak o tym pomyśleć) i narzędziach do tego. Zapraszam do wykorzystania mojego ostatniego akapitu jako punktu wyjścia.
arex1337

Odpowiedzi:

15

Krótka odpowiedź to „zarządzanie wdrażaniem systemu operacyjnego”, „zarządzanie konfiguracją” i „pakowanie oprogramowania”. Następuje długa odpowiedź.

Chciałbym dodać do odpowiedzi Daniela Pittmana rozbicie tego, co stanowi „system” w administracji systemami.

System lub środowisko będzie obejmować:

  • Serwery
  • System operacyjny
  • Konfiguracja
  • Pakiety dostawców; i
  • Pakiety lokalne

Objęcie nimi będzie takich procesów jak:

  • Wdrożenie lub obrazowanie systemu operacyjnego
  • Zarządzanie konfiguracją
  • Zarządzanie pakietami oprogramowania
  • Audyt / logowanie
  • Monitorowanie
  • Kopie zapasowe

I chcesz je połączyć, aby pomóc Ci osiągnąć niefunkcjonalne cele, takie jak:

  • Powtarzalność
  • Konserwowalność
  • Wymierność
  • Występ
  • Możliwość śledzenia
  • Testowalność
  • Zmienność

To szybki zrzut mózgu. Jestem pewien, że można dodać więcej do wszystkich list.

Twoje pytanie dotyczy kilku z nich bez użycia konkretnych słów. Na przykład chcesz mieć możliwość łatwego wdrażania i przywracania z powrotem, tj. Chcesz mieć łatwość konserwacji; chcesz to zrobić w środowisku testowym i testować, aż przejdzie, tj. powtarzalność, testowalność i mierzalność; zastanawiasz się nad wprowadzeniem obrazów VM do kontroli wersji, ponieważ chcesz powtarzalności wdrożeń systemu operacyjnego i konfiguracji.

Istnieje wiele narzędzi, które mogą ci w tym pomóc, niektóre z nich wspomniane przez Daniela. Niektóre inne to:

  • Kickstarts (oparte na RedHat), Preseed (oparte na Debianie), WDS (MS Windows) do wdrażania znanych środowisk systemu operacyjnego
  • Spacewalk / Satellite (na bazie RedHat), Zasady grupy (MS Windows) do konfiguracji i zarządzania pakietami
  • Systemy pakowania YUM i APT do generowania, wdrażania, aktualizacji i usuwania pakietów (zestawy plików binarnych, danych i konfiguracji zawierające oprogramowanie)
  • Nagios, OpenNMS i SCOM do monitorowania
  • Amanda, Bacula i Windows Backup Server do tworzenia kopii zapasowych
  • Munin, PCP i Hyperic do monitorowania wydajności
  • CVS, SVN, GIT lub Bazaar do kontroli wersji
  • Hudson i Jenkins do zarządzania kompilacją
  • Selen i robot do testowania
  • Bugzilla, Request Tracker i Jira do nagrywania, komunikacji i śledzenia

Ponownie, nie jest to wyczerpująca lista, ale coś, co trzymam w głowie, aby mnie poprowadzić i mam nadzieję, że pomoże ci również.

nearora
źródło
Co to jest Marvin? Nie mogę znaleźć odniesienia do tego, czy to literówka?
thelsdj
s / Marvin / Hudson / - dzięki za zauważenie, że @thelsdj :-)
nearora
16

Oświadczenie: Jestem jednym z twórców Puppet.

Oczywistym sposobem jest po prostu zastosowanie pojęć: zdefiniowanie cyklu rozwoju / testu / produkcji i wprowadzanie zmian przez nie. Użyj kontroli wersji, aby śledzić systemy.

Krótko mówiąc, rozpoczęcie tej ścieżki prowadzi do odkrycia, że ​​naprawdę potrzebujesz narzędzi automatyzujących te rzeczy - w zasadzie, że chcesz zautomatyzować administrację systemami, aby nie używać tych technik na komputerach, używasz ich w systemie, który zarządza maszynami.

Narzędzia takie jak Chef , Puppet , Salt i CFEngine to popularne narzędzia zaspokajające tę drugą potrzebę. Działają w ogólnym kierunku przekształcania administracji systemami w centralne rozwiązanie, które umożliwia kontrolę wersji i testowanie.

Ruch DevOps jest kolejnym źródłem dobrych informacji, jak to zrobić. Chociaż zaleceniem jest lepsza współpraca między Deweloperami i personelem Operacji, to również zmierza w tym samym kierunku.

Daniel Pittman
źródło
15
Teraz wiemy, kogo prześladować na temat naszych pytań o Marionetkę ...
ewwhite
1

W świecie Windows te problemy związane z zarządzaniem cyklem życia aplikacji są rozwiązywane za pomocą System Center 2012.

W System Center Virtual Machine Manager (SCVMM) usługi są definiowane przy użyciu „szablonów usług” (np. Klasyczna usługa trójwarstwowa), a środowiska wykonawcze są definiowane jako „chmury” (np. Programowanie, przemieszczanie, produkcja). Szablony usług można wersjonować i wdrażać (w sposób zautomatyzowany) w różnych chmurach. Pod przykryciem SCVMM zajmuje się dostarczaniem, wdrażaniem i konfiguracją zwirtualizowanego sprzętu (maszyn wirtualnych itp.) I oprogramowania (systemu operacyjnego, komponentów aplikacji itp.).

System Center Service Manager to element, który łączy to z punktu widzenia procesu. Na przykład zarządzanie problemami i kontrola zmian.

Richard B.
źródło