Jak zautomatyzować konfigurację środowiska programistycznego? [Zamknięte]

80

Za każdym razem, gdy nowy programista dołącza do zespołu lub komputera, którego programista używa zmian, musi wykonać wiele pracy, aby skonfigurować lokalne środowisko programistyczne, aby bieżący projekt działał. Jako zespół SCRUM staramy się zautomatyzować wszystko, w tym wdrażanie i testy, więc pytam: czy istnieje narzędzie lub praktyka umożliwiająca zautomatyzowanie konfiguracji lokalnego środowiska programistycznego?

Na przykład, aby skonfigurować moje środowisko, najpierw musiałem zainstalować eclipse, a następnie SVN, Apache, Tomcat, MySQL, PHP. Następnie zapełniłem bazę danych i musiałem dokonać drobnych zmian w różnych plikach konfiguracyjnych itp. Czy istnieje sposób na ograniczenie tej pracy do jednego kliknięcia?

nimcap
źródło

Odpowiedzi:

68

Istnieje kilka opcji, a czasami przydatne jest ich połączenie:

  • automatyczna instalacja
  • obrazowanie dysku
  • wirtualizacja
  • kontrola kodu źródłowego

Szczegóły dotyczące różnych opcji:

  1. Zautomatyzowana instalacja narzędzi do automatyzacji instalacji i konfiguracji różnych usług stacji roboczej użytkownika, narzędzi i plików konfiguracyjnych:

    • Puppet ma krzywą uczenia się, ale jest potężny. Definiujesz klasy maszyn (programowanie, serwer WWW itp.), A następnie robi to, co jest konieczne, aby zainstalować, skonfigurować i utrzymywać skrzynkę w odpowiednim stanie. Poprosiłeś o jedno kliknięcie, ale Puppet domyślnie to zero-click, ponieważ okresowo sprawdza twój komputer, aby upewnić się, że nadal jest skonfigurowany zgodnie z oczekiwaniami. Wykryje, kiedy plik lub tryb został zmieniony i naprawi problem. Obecnie używam tego do obsługi kilku skrzynek RedHat Linux, chociaż jest w stanie obsłużyć tysiące. (Nie obsługuje systemu Windows od 2009-05-08).
    • Cfengine to kolejny. Widziałem to z powodzeniem w sklepie z 70 inżynierami używającymi RedHat Linux. Jego ograniczenia były po części powodem powstania Puppet.
    • SmartFrog to kolejne narzędzie do konfiguracji hostów. Obsługuje system Windows.
    • Skrypty powłoki. RightScale zawiera przykłady konfigurowania obrazu Amazon EC2 za pomocą skryptów powłoki.
    • Zainstaluj pakiety. W systemie Unix można to zrobić całkowicie z pakietami, aw systemie Windows msi może być opcją. Na przykład RubyWorks zapewnia pełny stos Ruby on Rails, a wszystko to poprzez zainstalowanie jednego pakietu, który z kolei instaluje inne pakiety poprzez zależności.
  2. Obrazy dysków Oczywiście są też narzędzia do tworzenia obrazów dysków do przechowywania obrazu skonfigurowanego hosta, tak aby można go było przywrócić na innym hoście. Podobnie jak w przypadku wirtualizacji, jest to szczególnie przydatne w przypadku pudełek testowych, ponieważ łatwo jest przywrócić wszystko do czystej karty. Ciągłe uaktualnianie rzeczy jest nadal problemem - czy warto tworzyć nowe obrazy tylko po to, aby propagować zmianę w pliku konfiguracyjnym?

  3. Wirtualizacja to kolejna opcja, na przykład tworzenie kopii obrazu Xen, VirtualPC lub VMWare w celu utworzenia nowych hostów. Jest to szczególnie przydatne w przypadku pudełek testowych, ponieważ bez względu na to, jaki bałagan stworzy test, możesz łatwo przywrócić czysty, znany stan. Podobnie jak w przypadku narzędzi do tworzenia obrazów dysków, utrzymywanie aktualności hostów wymaga większej liczby czynności wykonywanych ręcznie i większej czujności niż w przypadku używania zautomatyzowanego narzędzia do instalacji / konfiguracji.

  4. Kontrola kodu źródłowego Po zainstalowaniu / skonfigurowaniu niezbędnych narzędzi, tworzenie kompilacji powinno polegać na sprawdzeniu tego, co jest potrzebne z repozytorium kodu źródłowego i zbudowaniu go.

Obecnie używam kombinacji powyższych, aby zautomatyzować proces w następujący sposób:

  • Zacznij od instalacji systemu operacyjnego barebone na gościa VMWare
  • Uruchom skrypt powłoki, aby zainstalować Puppet i pobrać jego konfiguracje z kontroli kodu źródłowego
  • Puppet, aby zainstalować narzędzia / komponenty / konfiguracje
  • Sprawdź pliki z kontroli kodu źródłowego, aby skompilować i wdrożyć naszą aplikację internetową
Pete TerMaat
źródło
W naszym biurze są Windows, Linux i Mac OS. więc wybiorę opcję wirtualizacji.
nimcap
Latamy z wirtualizacją i to jest dobre rozwiązanie. Kiedy zacząłem, potrzebowałem 3-4 dni na skonfigurowanie, teraz nowi programiści przygotowują się do skopiowania obrazu VPC.
Burt
5
Czy napisałeś agile.dzone.com/articles/4-methods-automate-development, ponieważ brzmi bardzo podobnie?
Aaron D
5
Nie, nie napisałem tego artykułu, chociaż sądząc po podobieństwach, wydaje się, że zainspirowałem go. :-)
Pete TerMaat
20

Natknąłem się na to pytanie i byłem bardzo zdziwiony, że nikt jeszcze nie wspomniał o Vagrant .

Włóczęga

Jak wspomnieli Pete TerMaat i inni, wirtualizacja to świetny sposób na zarządzanie i automatyzację środowisk programistycznych. Vagrant zasadniczo eliminuje ból związany z konfiguracją tych wirtualnych skrzynek.

W ciągu kilku minut możesz mieć całkowicie nową kopię swojej ulubionej dystrybucji Linuksa, uruchomioną i udostępnioną dokładnie w taki sam sposób, jak serwer produkcyjny.

Koniec z walką z OSX lub Windows o zainstalowanie PHP, MySQL itp. Całe oprogramowanie żyje i działa wewnątrz maszyny wirtualnej. Możesz nawet korzystać z SSH z vagrant ssh. Jeśli popełnisz błąd lub coś zepsujesz, po prostu vagrant destroyto i vagrant upzacznij od nowa.

Vagrant automatycznie tworzy zsynchronizowany folder w lokalnym systemie plików, co oznacza, że ​​nie musisz programować na maszynie wirtualnej (tj. Używając Vima). Użyj dowolnego wybranego edytora.

Teraz tworzę nowe „Vagrant box” dla prawie każdego projektu, który robię. Wszystkie moje ustawienia są zapisywane w repozytorium projektu, więc łatwo jest sprowadzić innego członka zespołu. Muszą po prostu wyciągnąć repozytorium i uruchomić vagrant up, i są dosłownie gotowi do pracy.

Ułatwia to również znacznie obsługę projektów, które mają różne wymagania dotyczące oprogramowania. Być może masz jakieś projekty, które opierają się na PHP 5.3, ale kilka nowszych, które korzystają z PHP 5.4. Po prostu zainstaluj żądaną wersję dla tego projektu.

Sprawdź to!

Jonathan
źródło
1
Debugowanie może być uciążliwe w środowiskach zwirtualizowanych
Jonathan,
13

Jedną z ważnych kwestii jest takie skonfigurowanie projektów w kontroli źródła, aby można było natychmiast kompilować, wdrażać i uruchamiać po zakończeniu zakupu.

Oznacza to, że powinieneś również sprawdzić infrastrukturę pomocniczą, taką jak Makefiles, ant buildfiles itp., Oraz ustawienia narzędzi, takie jak pliki projektów IDE.

To powinno rozwiązać problemy z konfiguracją dla poszczególnych projektów.

Do podstawowej konfiguracji maszyny można użyć standardowego obrazu. Inną opcją jest użycie narzędzi platformy do zautomatyzowania instalacji. W Linuksie możesz utworzyć metapakiet, który zależy od wszystkich potrzebnych pakietów. W systemie Windows podobna rzecz powinna być możliwa przy użyciu MSI lub podobnego.

Edytować:

W idealnym przypadku zamiast sprawdzać infrastrukturę pomocniczą należy wpisać informacje, które pozwalają kompilacji wygenerować infrastrukturę pomocniczą. Jest to podejście przyjęte np. Przez system budowania GNU (narzędzia automatyczne itp.) Lub przez Mavena. Jest to jeszcze bardziej eleganckie, ponieważ możesz (teoretycznie) wygenerować infrastrukturę dla dowolnego (obsługiwanego) środowiska kompilacji, dzięki czemu nie jesteś związany np. Z jednym konkretnym IDE, a ustawienia w infrastrukturze pomocniczej (ścieżki itp.) Nie muszą być powielane główne ustawienia projektu.

Jest to jednak również bardziej złożone podejście, więc jeśli nie możesz go uruchomić, uważam, że sprawdzanie rzeczy takich jak pliki IDE bezpośrednio jest dopuszczalne.

sleske
źródło
7

Lubię używać Virtual PC lub VMware do wirtualizacji środowiska programistycznego. Zapewnia to standardowe „środowisko programistyczne”, które może być współdzielone przez programistów. Nie musisz martwić się o oprogramowanie, które użytkownik mógłby dodać do swojego systemu, a które może kolidować ze środowiskiem programistycznym. Daje mi również możliwość pracy przy dwóch projektach, w których środowiska programistyczne nie mogą znajdować się jednocześnie w jednym systemie (przy użyciu dwóch różnych wersji podstawowej technologii).

jeremyasnyder
źródło
Czy działanie w środowisku VirtualPc / VMWare znacząco wpływa na wydajność? Czy używasz programu Visual Studio 2008?
Joel Gauvreau
Znam co najmniej jeden duży sklep programistyczny, który WSZYSTKO tworzy swoje oprogramowanie wyłącznie na maszynach wirtualnych (VMWare). Sprawy są znacznie lepsze teraz, gdy procesory obsługują wirtualizację sprzętu ...
tomfanning
Musisz uważać na konflikty nazw komputerów. Windows nie jest zbyt szczęśliwy, gdy w jednej sieci pojawiają się dwa komputery o tej samej nazwie. Wolę też, aby moje środowisko deweloperskie nie znajdowało się na maszynie wirtualnej. Koszty ogólne mogą naprawdę obniżyć moje wyniki.
Kieveli
2
Używamy całkowicie zwirtualizowanego środowiska deweloperskiego. Używamy VMServer lub VirtualBox do hostowania maszyn wirtualnych Vista. Obraz maszyny wirtualnej zawiera cały nasz stos programistyczny, ale nie jest dołączony do domeny korporacyjnej. Gdy użytkownik potrzebuje nowego komputera, kopiuje go lokalnie, uruchamia NewSID, a następnie dołącza do domeny z unikalną nazwą komputera. Na nowoczesnym sprzęcie nie ma zauważalnego spadku wydajności. Używamy VS2008 z ~ 20 projektami C ++ / C # w rozwiązaniu i wszystko działa dobrze.
Colin Desmond
Ogromną zaletą, którą widzę w przypadku wirtualizacji, jest możliwość zapisania obecnego stanu w takim stanie, w jakim jest, dzięki czemu kiedy wrócisz do niego później, wrócisz dokładnie tam, gdzie byłeś. Nie jest to dokładnie związane z konfiguracją nowej maszyny deweloperskiej, ale fajny efekt uboczny używania maszyny wirtualnej.
Joel Gauvreau
3

Użyj marionetki, aby skonfigurować środowisko programistyczne i produkcyjne. Korzystanie z najnowocześniejszego systemu automatyzacji to jedyny sposób na skalowanie operacji.

David Schmitt
źródło
1

Zawsze istnieje możliwość korzystania z maszyn wirtualnych (patrz np. VMWare Player ). Utwórz jedno środowisko i skopiuj je dla każdego nowego pracownika przy minimalnej wymaganej konfiguracji.

tehvan
źródło
1

Wcześniej mieliśmy wszystko (i mam na myśli WSZYSTKO) w SCM (Clearcase potem SVN). Gdy nowy programista może to zrobić, zainstalował ClearCase | SVN i wyssał repozytorium. Obsługuje to również przypadek, w którym musisz zaktualizować konkretną bibliotekę / narzędzie, ponieważ możesz po prostu poprosić zespoły programistów o zaktualizowanie swojego środowiska.

Użyliśmy do tego dwóch repozytoriów, więc kod i narzędzia / konfiguracja znajdowały się w oddzielnych miejscach.

Mike Reedell
źródło
1

Bardzo polecam Blueprint od DevStructure. Jest to oprogramowanie typu open source, a Twój przypadek użycia jest dokładnym powodem, dla którego pierwotnie napisaliśmy to oprogramowanie. Nasze cele nieco się zmieniły, ale nadal jest to doskonałe narzędzie do tego, co opisujesz. Krótko mówiąc, możesz tworzyć konfiguracje serwera wielokrotnego użytku - martwe proste zarządzanie konfiguracją. Mam nadzieję, że to pomoże!

https://github.com/devstructure/blueprint (Blueprint @ Github)

Matt Tanase
źródło
1
Czy chodzi o środowisko programistyczne czy serwer?
nimcap
1

Sam o tym myślałem. Istnieje kilka innych technologii, które możesz dodać do tego miksu. Oto, co obecnie konfiguruję:

  • Wstępnie ustawione obrazy instalacyjne oparte na PXE (Debian Squeeze). Możesz uruchomić maszynę typu bare-metal (lub nowe urządzenie wirtualne) i wybrać obraz z menu rozruchowego PXE. Ma to tę główną zaletę, że można zainstalować środowisko na maszynach fizycznych (oprócz urządzeń wirtualnych).
  • Ktoś już wspomniał o Puppet. Używam CFEngine, ale to podobna sprawa. Zasadniczo konfiguracja jest udokumentowana i scentralizowana w plikach zasad, które są stale wymuszane przez agenta na kliencie.
  • jeśli nie chcesz sztywnego środowiska (np. programiści mogą wybrać kombinację zestawów narzędzi), możesz toczyć własne pakiety deb, aby nowi deweloperzy mogli pisać sudo apt-get install acmecorp-eclipse-envlub sudo apt-get install acmecorp-intellij-env, na przykład.
  • Trochę nie na temat, ale jeśli używasz środowiska opartego na Debianie (np. Ubuntu), rozważ instalację apt-cacher(pakiet proxy). Oprócz oszczędności przepustowości, znacznie przyspieszy to instalacje (ponieważ pakiety są buforowane w sieci lokalnej).
hoipolloi
źródło
0

Jeśli używasz maszyn w standardowej konfiguracji, możesz wyobrazić sobie dysk z nową, doskonale skonfigurowaną instalacją - jest to bardzo popularne podejście w wielu korporacjach (i nie tylko dla programistów). Jeśli potrzebujesz oddzielnie skonfigurowanych systemów operacyjnych, możesz tar-bz2 wszystkie dodane i zmienione pliki, gdy skonfigurowany system operacyjny zostanie przekształcony w żądaną konfigurację i po prostu rozpakuj go jako root, aby utworzyć żądane środowisko od zera.

Alex Martelli
źródło
0

jeśli używasz wersji linuxowej, prawdopodobnie masz system zarządzania pakietami: myśli .rpm dla fedora / redhat lub .deb dla ubuntu / debian. wiele z rzeczy, które opisujesz, ma już dostępne pakiety: svn, eclipse, itp. możesz toczyć własne pakiety dla oprogramowania specyficznego dla firmy, utworzyć repozytorium (być może dostępne tylko w sieci lokalnej), a następnie Twoja konfiguracja może zostać zredukowana do jednego skrypt bash, który doda repozytorium firmy do /etc/apt/sources.list (debian / ubuntu), a następnie wywoła polecenie takie jak,


/home/newhire$ apt-get update && apt-get install some complete package list

możesz użyć buildbota, aby następnie zautomatyzować regularne kompilacje pakietów firmowych, które często się zmieniają.

si28719e
źródło