Czy najlepszą praktyką jest ręczne wdrażanie projektu na serwerze plik po pliku?

26

Firma, dla której obecnie pracuję, nie wdraża jeszcze ciągłej dostawy. Nadal wdrażamy projekt ręcznie na serwerze, plik po pliku. Jaka jest najlepsza praktyka: aby ręcznie wdrożyć jeden artefakt projektu dla każdego wdrożenia lub kontynuować wdrażanie plik po pliku?

Jake Muller
źródło
12
Dla tego zadania nie ma nawet „jednej praktyki dla wszystkich sytuacji”.
whatsisname
26
Zwykle odsyłam do: Dlaczego zadawanie pytań na temat „najlepszych praktyk” jest czymś złym? Myślę, że wszyscy możemy się zgodzić, że jest to najgorsza praktyka. Jest nieco powyżej „podpalenia serwera”.
3
dotyczy: en.wikipedia.org/wiki/…
Jens Schauder
9
Podejrzewam, że OP zadaje to pytanie, ponieważ zna już odpowiedź, a jego miejsce pracy robi „Robię to źle”, a OP próbuje zebrać dowody, aby uzasadnić zmianę sposobu, w jaki robią różne rzeczy.
user1936
2
Tak zrobiliśmy w drugim tysiącleciu. Powinno być dobrze! ;)
Don Branson

Odpowiedzi:

103

Jaka jest najlepsza praktyka? ręcznie wdrożyć jeden artefakt projektu przy każdym wdrożeniu lub kontynuować wykonywanie pliku według wdrożenia pliku?

Ani.

Najlepszą praktyką jest zautomatyzowanie wdrożenia całkowicie i wyłącznie. Oznacza to, że nikt nie może ręcznie umieścić niczego na serwerze.

„Podsumowując streszczenie: Ludzie są problemem”. (Douglas Adams)

Ludzie popełniają błędy. Jeśli jeden z plików, o którym zapomnisz skopiować, to udostępniona „biblioteka”, która została znacznie zmieniona, możesz spowodować awarię całej witryny produkcyjnej.

Phill W.
źródło
17
@JohnHamilton Jeśli automatyzacja kompilacji jest trudnym zadaniem, to samo w sobie jest rozwiązaniem na dłuższą metę. Nie musisz mieć środowiska programistycznego, testowego i przedprodukcyjnego z całkowicie zautomatyzowanym wdrażaniem, ale tworzenie standardowego pakietu wdrażania powinno być standardową praktyką.
Neil,
20
Eee, rozmiar firmy nie jest tak naprawdę problemem (do pewnego stopnia). Koszt będzie związany z zakresem automatyzacji wdrożenia, a także ze złożonością środowiska produkcyjnego. Ale istnieje gradient automatyzacji i gradient „kosztu” (czasu / pieniędzy), zaczynając od prostych rzeczy, takich jak skrypt do kopiowania produkcji kompilacji na produkcję (niewielka inwestycja z natychmiastowymi konkretnymi oszczędnościami kosztów), i od tego momentu rośnie i jest bardziej zależny na wykup menedżerski niż wielkość firmy.
BurnsBA
39
@JohnHamilton: Mniejsza firma, która jest źle zarządzana, może się łudzić, że tak myśli. Automatyzacja kopiowania plików nie jest trudnym zadaniem, a koszt regularnego wykonywania tego przez osobę zatrudnioną znacznie przewyższy koszt napisania nawet najbardziej trywialnego skryptu, aby to zrobić.
GManNickG
8
@JohnHamilton: Koszt automatyzacji należy porównać z ryzykiem błędów popełnionych podczas ręcznego wdrażania.
Robert Harvey
7
Nawet niekoniecznie potrzebujesz Jenkinsa. Lepszym rozwiązaniem byłby tylko skrypt sprawdzania z kilkoma poleceniami scp (lub czymkolwiek, czego używasz podczas ręcznego przesyłania).
user253751
14

Kroki ręczne wymagają dużego wysiłku i są ryzykowne: możesz zapomnieć o niezbędnym pliku. Może nie wszyscy w twoim zespole wiedzą, które pliki należy skopiować. Wszystkie te problemy sprawiają, że wdrożenia są duże, zniechęcające i rzadkie - całkowicie niepotrzebne. Automatyzacja rozwiązuje te problemy.

Nawet najprostszy krok automatyzacji może przynieść duże korzyści, ponieważ wdrożenia stają się banalne. Skrypt, który kopiuje pliki lub artefakty za pośrednictwem (S) FTP, Rsync lub innej technologii, to świetny pierwszy krok. Możesz później rozwinąć ten skrypt, aby automatycznie wykonać kroki przed i po instalacji na serwerze, takie jak ponowne uruchomienie usług.

amon
źródło
Jeśli łączna liczba serwerów wynosi 2 lub mniej, ręczne jest mniej ryzykowne niż automatyczne. Automatyczny wymaga szczegółowego sprawdzania błędów. Nigdy nie widziałem trywialnego automatycznego rozwiązania, które pozostało trywialne.
Joshua
3
@Joshua Nie jestem pewien, czy liczba serwerów powinna być tutaj czynnikiem. Automatyzacja ma również wartość, gdy wdrażasz wiele razy na tym samym serwerze. Pytanie brzmi: komu bardziej ufasz: komputerowi, aby wiernie wykonał skrypt, który zadziałał raz, czy twoja zdolność do zapamiętywania wszystkich niezbędnych kroków za każdym razem? Jako omylny i zapominalski człowiek zdecydowanie wolę nie robić rzeczy ręcznie. Czasami nawet piszę jednorazowe zadania, aby móc przejrzeć polecenia przed ich uruchomieniem. Jest to o wiele mniej ryzykowne niż ręczne wykonywanie losowych czynności, dopóki nie zadziała!
amon
Mam duże doświadczenie w obie strony. To, co robię do ręcznego wdrażania, to instalacja xcopy, więc naprawdę nie ma kroków, aby o tym zapomnieć.
Joshua
9

Najlepszą praktyką byłoby wdrożenie pewnego rodzaju zautomatyzowanego procesu.

Uważaj, aby sprawdzić, czy nie ma specjalnego powodu dla podejścia „plik po pliku”, który musiałbyś wziąć pod uwagę.

Ewan
źródło
1
Zadaję to pytanie, ponieważ chcę się upewnić, że nie jest to najlepsza praktyka na świecie. Zastanawiam się, czy nadal jest jakaś firma / programiści, którzy nadal ręcznie wdrażają swoje aplikacje / projekt, a co gorsza, wdrażanie plików po plikach przy każdej iteracji programowania.
Jake Muller,
4
Najlepszym pytaniem, jakie należy zadać, jest: „dlaczego robimy to w ten sposób?” Nie mogę wymyślić powodu, ale wiem, że niektóre firmy lubią trzymać ręczną rękę na spuście
Ewan
8
@JakeMuller To, co powinieneś przeczytać między wierszami tej odpowiedzi, to to, że decyzje powinny być podejmowane na podstawie rozumowania sytuacji, a nie niewolniczego przylegania do tego, co ktoś bez wiedzy o niej zadeklarował, że zawsze jest właściwą odpowiedzią.
Blrfl,
Powodem podejścia plik po pliku mogą być zależności między plikami, dlatego aktualizacje plików są wdrażane przed zmianami w innych plikach, które zależą od tych plików. Aktualizacja plików w niewłaściwej kolejności może na chwilę zahamować system.
bdsl
6

Dzięki ciągłej dostawie (a właściwie wdrożeniu) i przenoszeniu każdego pliku ręcznie, patrzysz na dwie skrajności. Jest całkowicie zrozumiałe, że nie możesz / nie chcesz utworzyć w pełni zautomatyzowanego potoku (jeszcze). Należy jednak rozważyć zautomatyzowanie części procesu.

Ręczne przenoszenie każdego pliku jest dość ryzykowne i możesz zmniejszyć to ryzyko, na przykład, oznaczając repozytorium kodu, sprawdzając ten znacznik na komputerze, budując artefakty i przesyłając je na serwer. Każdy z tych kroków można zautomatyzować, tak aby wykonywano je kilkoma kliknięciami myszy, co znacznie zmniejszy ryzyko zapomnienia pliku lub przypadkowego popchnięcia w celu wygenerowania dodatkowych plików.

Zautomatyzuj to, co możesz, krok po kroku. Fakt, że nie stać Cię na w pełni zautomatyzowany potok CD, nie powinien zniechęcać Cię do automatyzacji niektórych części.

Blueriver
źródło
1

Najlepszą praktyką byłoby wykonanie analizy kosztów i korzyści dla konkretnego wdrożenia dla konkretnej firmy.

Ogólna odpowiedź brzmi: „nie rób rzeczy ręcznie, automatyzuj”. Jest to ogólnie właściwa odpowiedź dla ogólnych rodzajów firm. Jednorodność otrzymywanych odpowiedzi powinna wskazywać, jak silnie społeczność uznaje to za najlepsze praktyki. Jeśli Twoja firma uważa, że ​​automatyzacja nie jest właściwym narzędziem, powinna zrozumieć, co czyni ją wyjątkową. Ta wyjątkowość powinna zostać uwzględniona w procesie decyzyjnym. Nie ma „najlepszych praktyk”, gdy zestaw próbek ma wartość 1.

Pytania takie jak „ile plików” i „jak często rzeczy są aktualizowane” oraz „jakie są konsekwencje zepsucia” oraz „jak szybko można cofnąć złą zmianę” są ważnymi pytaniami, na które należy odpowiedzieć. W przypadku automatyzacji wiele z tych pytań staje się nieistotnych, ale są one niezbędne do prawidłowego przypisania kosztów i korzyści związanych z procesem ręcznej aktualizacji.

Cort Ammon - Przywróć Monikę
źródło
1

Istnieje wiele odcieni szarości pomiędzy ręcznym kopiowaniem plik po pliku a ciągłym dostarczaniem.

Zacznij od zmniejszenia złożoności procesu wdrażania, na przykład poprzez użycie pliku zip, pakietu w stylu rpm, infrastruktury jako narzędzia do zarządzania kodem (takiego jak marionetka lub szef kuchni) lub nawet po prostu prostego skryptu, który kopiuje pliki z obszar przejściowy na serwerze ftp.

Procesy wdrażania z większą liczbą ręcznych kroków są bardziej podatne na błędy (a tym samym niepowodzenie) - jak inni powiedzieli, usuń z tego element ludzki.

Nie musisz wdrażać pełnej ciągłej dostawy (co jest kosztowne i wymaga wysiłku / inwestycji / innowacji w czasie) - zacznij od prostoty, spraw, by działało, pokaż korzyści - i stamtąd.

vikingsteve
źródło
0

Zależy to od używanej technologii oprogramowania (lub stosu) (język interpretowany, język kompilowany, aplikacja komputerowa, urządzenia mobilne itp.), Miękki. dev. zasady działów, jeśli masz narzędzia do automatyzacji, jak ważna jest twoja aplikacja, a jedną ważną rzeczą do rozważenia jest architektura oprogramowania (sposób zaprojektowania aplikacji). Dlatego masz tutaj różne odpowiedzi. Zasadniczo najlepszym podejściem będzie zmniejszenie interwencji człowieka w zadania związane z wdrażaniem, aby uniknąć błędów. Dobrą praktyką będzie testowanie wszystkiego na serwerze QA Server (rozważ użycie serwera wirtualnego, jeśli budżet stanowi problem) przed wdrożeniem oraz zastosowanie procedur odwrotnych w celu przywrócenia poprzedniej wersji w przypadku awarii ( ZAWSZE mają kopię zapasową).

Edu Garcia
źródło