Jak aktualizujesz strony internetowe na żywo za pomocą zmian kodu?


21

Wiem, że to bardzo podstawowe pytanie. Gdyby ktoś mnie żartował i powiedział, jak sobie z tym poradzi, byłbym wdzięczny.

Postanowiłem to opublikować, ponieważ mam zamiar zainstalować SynchToy, aby rozwiązać problem poniżej i czuję się trochę nieprofesjonalny przy użyciu „zabawki”, ale nie mogę wymyślić lepszego sposobu.

Wiele razy znajduję się w tej sytuacji i brakuje mi bolesnego oczywistego sposobu robienia rzeczy - pochodzi to od bycia jedynym programistą w firmie.

  • Aplikacja internetowa ASP.NET opracowana na moim komputerze w pracy
  • Rozwiązanie ma 2 projekty:
    • Witryna (pliki)
    • WebsiteLib (C # / dll)
  • Korzystanie z repozytorium Git
  • Wdrożony na serwerze sieciowym GoGrid 2008R2

Rozlokowanie:

  1. Wprowadź zmiany w kodzie.
  2. Push to Git.
  3. Zdalny pulpit do serwera.
  4. Wyciągnij z Git.
  5. Zastąp pliki na żywo, przeciągając / upuszczając za pomocą Eksploratora Windows.

W kroku 5 usuwam wszystkie pliki z katalogu głównego witryny. To nie może być dobra rzecz. Dlatego właśnie zamierzam zainstalować SynchToy ...

AKTUALIZACJA: DZIĘKI za wszystkie przydatne odpowiedzi. Nie mogę wybrać, który z nich ma oznaczać odpowiedź - między użyciem wdrożenia internetowego - wygląda na to, że mam kilka przydatnych sugestii:

  1. Web Project = cała witryna spakowana w jedną bibliotekę DLL - wadą dla mnie nie mogę wypychać prostych aktualizacji - będąc samotnym programistą w 50-osobowej firmie, czasami jest to coś prostszego.
  2. Przechodząc prosto z SCM do katalogu głównego witryny - pierwotnie nie zrobiłem tego ze strachu, że mój ukryty katalog SCM może zostać ujawniony, ale odpowiedzi tutaj pomogły mi to przełamać (chociaż nadal nie lubię mieć takiego więcej rzeczy do zmartwienia o zapomnieniu, aby upewnić się, że nadal jest to prawda)
  3. Korzystanie z farmy internetowej i systematyczne wdrażanie w węzłach - jest to idealne rozwiązanie na zero przestojów, co tak naprawdę jest dla mnie ważne, ponieważ witryna jest zasadniczo źródłem przychodów w czasie rzeczywistym dla mojej firmy - może być mi trudno przekonać ich do podwaja koszt serwerów.

-> wreszcie, ponowne wprowadzenie w życie podstawowej zasady, że konieczne jest wdrożenie za pomocą jednego kliknięcia dla witryny LUB INNE TAM COŚ ŹLE jest prawdopodobnie najbardziej przydatną rzeczą, jaką uzyskałem z odpowiedzi.

AKTUALIZACJA 2: Pomyślałem, że wrócę do tego i aktualizuję rzeczywiste rozwiązanie, które istnieje od wielu miesięcy i działa idealnie (w przypadku mojego pojedynczego serwera WWW).

Proces, którego używam to:

  1. Wprowadź zmiany w kodzie
  2. Push to Git
  3. Zdalny pulpit do serwera
  4. Wyciągnij z Git
  5. Uruchom następujący skrypt wsadowy:

    cd C: \ Users \ Administrator

    % systemroot% \ system32 \ inetsrv \ appcmd.exe stop site "/site.name:Default Web Site"

    robocopy Documents \ code \ da \ 1 \ work \ Tree \ LendingTreeWebSite1 c: \ inetpub \ wwwroot / E / XF connectionconfig Web.config

    % systemroot% \ system32 \ inetsrv \ appcmd.exe strona początkowa „/site.name:Default Web Site”

Jak widać, sprowadza to stronę na dół, używa robocopy do inteligentnego kopiowania zmienionych plików, a następnie przywraca kopię zapasową strony. Zwykle działa w mniej niż 2 sekundy. Ponieważ szczytowy ruch w tej witrynie wynosi około 2 żądań na sekundę, dopuszczalne jest pominięcie 4 żądań na aktualizację witryny.

Sine Zrozumiałem bardziej z Gitem. Przekonałem się, że pierwsze cztery kroki powyżej, które są „procesem ręcznym”, są również do przyjęcia, chociaż jestem pewien, że mógłbym rzucić całość na jedno kliknięcie, jeślibym chciał.

Dokumentacja AppCmd.exe znajduje się tutaj . Dokumentacja do Robocopy jest tutaj .


6
Lepsze dopasowanie do błędu serwera.
Karl Bielefeldt,

Powinieneś rozważyć SSHing na swoim serwerze zamiast korzystania ze zdalnego pulpitu, w ten sposób możesz napisać skrypt do wdrożenia, jeśli chcesz.
Malfist

5
Myślę, że to pytanie może pozostać tutaj. Wdrażanie witryny wydaje mi się czymś, co dotyczy programisty, a nie zadania sysadmin, ale myślę, że może się to różnić w zależności od firmy. Mimo to, wszystkie odpowiedzi są jak dotąd ukierunkowane na programistów.
Adam Lear

1
@Malfist - w jaki sposób ssh łączy się z serwerem Windows?
Wyatt Barnett

@Wyatt Uruchamiając serwer SSH na zdalnej maszynie (prawie tak samo) jak na Linux-ie.
Adam Lear

Odpowiedzi:


3

Powinieneś sprawdzić wdrożenie sieciowe VS 2010. Jeśli GoGrid to obsługuje, dobrym rozwiązaniem jest pakiet internetowy.

http://weblogs.asp.net/scottgu/archive/2010/07/29/vs-2010-web-deployment.aspx


kiedy korzystasz z wdrożenia internetowego, tracisz opcję poprawki, nie? Wiem, że jest mnóstwo ludzi, którzy nie chcą robić czegoś poza formalnym procesem, ale lubię mieć możliwość w nagłych wypadkach ...
Aaron Anodide

Masz rację. Wiem, że w mojej firmie nie chcemy, aby ludzie to robili, ponieważ nie możemy śledzić zmian. Jednak w przypadku witryn osobistych bardzo lubię tę opcję.
Nate

3

W moim poprzednim pracodawcy, aby wdrożyć zmiany kodu, ustawiamy moduł równoważenia obciążeniaaby zatrzymać obsługę jednego serwera. Wygasanie sesji na pierwszym serwerze internetowym może potrwać 20 minut. Zaktualizowalibyśmy kod na tym serwerze WWW, rozpakowując plik zip wdrażania, a następnie sprawdziliśmy, czy wszystko działa poprawnie, naciskając bezpośredni adres IP tego pierwszego serwera WWW. Gdy jesteśmy przekonani, że działa dobrze, ustawiamy moduł równoważenia obciążenia na uderzający teraz zaktualizowany serwer WWW i czekamy, aż sesje wygasną na innym serwerze, a następnie aktualizujemy ten serwer (i tak dalej, aż wszystkie zostaną zaktualizowane). Po sprawdzeniu, ustawiliśmy moduł równoważenia obciążenia, aby wrócił do pracy. To skomplikowało się, gdy podczas szczytowych obciążeń sezonowych podłączono aż 10 serwerów WWW do modułu równoważenia obciążenia (więc ich aktualizowanie jeden po drugim może zająć godziny, ponieważ nie mogliśmy zamknąć strony internetowej na żywo - klienci musieli być w stanie uzyskać na stronie).

W ASP.NET, jeśli upuścisz dowolny plik o nazwie określonej App_Offline.htmw katalogu głównym witryny, ta strona internetowa zostanie zwolniona, co pozwoli ci zaktualizować DLLS (i cokolwiek innego). IIS wyświetli stronę zatytułowaną „Aplikacja offline”. Po usunięciu pliku, zmianie nazwy lub usunięciu aplikacja internetowa uruchomi się ponownie, a usługi IIS będą wyświetlać strony w tej witrynie. To właśnie robi Visual Studio, gdy publikujesz witrynę z wnętrza VS.


2

Zazwyczaj wszystko, co robię, to trzymam wszystko w repozytorium SVN. Kiedy skończę z pewnymi zmianami, zatwierdzam na stronie deweloperów, a następnie kasuję na produkcji. Synchronizuje wszystko, jest szybkie i łatwe. Jeśli sprawdzanie jest zbyt uciążliwe, możesz skonfigurować Apache za pomocą WebDAV i zrobi to za Ciebie.


martwisz się o to, że katalog .svn jest obecny na Twojej stronie?
Aaron Anodide

Nie bardzo, apache jest zwykle konfigurowany tak, aby odmawiać dostępu do tych folderów.
Malfist

IIS domyślnie również odrzuca .svn (lub .git lub .hg).
Wyatt Barnett

Jeśli złośliwy użytkownik uzyska dostęp do katalogu, uzyska dostęp do całego kodu w stanie czystym.
oleksii

5
Jeśli złośliwy użytkownik uzyska dostęp do twojego systemu plików, masz więcej powodów do zmartwień.
Malfist

2

Dla każdej z moich aplikacji internetowych mam konfigurację repozytorium git z trzema oddziałami. Na żywo, Beta, Funkcje. Live to oczywiście witryna na żywo. Beta to strona służąca do naprawy błędów lub do ostatecznego testowania funkcji bezpośrednio przed wdrożeniem. Potem, jak powiedziałeś, robię proste git push, git pull on live, aby pobrać informacje. Funkcje są używane do ulepszeń „następnej wersji”.


To samo działa z prawie wszystkimi systemami kontroli źródła.
deadalnix,

2

Próbujesz rozwiązać problem ciągłej dostawy . Początkowo zaczynasz od ręcznych kroków, ale wkrótce zdasz sobie sprawę z problemów. Oto najczęstsze:

  1. Kod działa na twoim komputerze, nie działa na produkcji
  2. Nowa zmiana psuje stary kod
  3. Przyrostowe zmiany utrudniają wdrożenie, otrzymasz nowe biblioteki do dołączenia, łatki do zastosowania itp.

Spójrz na TeamCity (lub inne podobne narzędzie).


2

Użyj automatycznego skryptu kompilacji i wdrożenia

Najlepszym sposobem na to jest użycie skryptu automatycznego budowania i wdrażania, takiego jak MsBuild lub Nant.

Powodem jest to, że możesz po prostu wpisać polecenie 1, aby uruchomić witrynę, a następnie po prostu wpisać polecenie 1, aby je wycofać. A jeśli będziesz wystarczająco dokładny, obejmie to migrację schematu bazy danych. (Migrator.Net)

Jednym z głównych powodów, dla których nie należy używać SVN ani GIT do wdrażania, jest to, że środowisko może zmieniać się między produkcją a etapami. W skrypcie NANT możesz zbudować pliki .config specjalnie dla docelowego środowiska. Oszczędza to zapomnienia o wprowadzeniu ustawienia konfiguracji w produkcji.

Automatyzuje również cały proces, dzięki czemu staje się sprawą jednego polecenia, a dowolna liczba procesów ręcznych staje się 1 prostym procesem.


1

Po pierwsze, powinieneś używać projektu internetowego. Jakie różnice pytasz?

Projekt sieciowy połączy wszystkie pliki klasy C # (w tym kod z tyłu) w jedną bibliotekę DLL (lepiej dla bezpieczeństwa i fakt, że można przenieść jeden plik)

Po drugie, powinieneś opublikować aplikację, a następnie nadal możesz zdalnie korzystać z pulpitu, przeciągnąć wszystkie pliki do folderu publikowania i po prostu ustawić nadpisywanie (nowe pliki zastąpią stare pliki).

Publikowanie umieści wszystkie niezbędne pliki aplikacji w jednym folderze.


1

Mój obecny pracodawca wdraża za pomocą marionetki . (Oto więcej pakietów oprogramowania, które rozwiązują ten sam problem.)

Mój poprzedni pracodawca zastosował niestandardowy system kontroli zadań do obsługi wdrażania oprogramowania, restartowania itp. Nawet jeśli był dostępny, był to zbyt duży przesadny na miarę twoich potrzeb.

Pracodawca, który miałem wcześniej, miał niestandardowe skrypty do kopiowania danych z subversion na serwery i przeprowadzania ciągłego restartu.

Kilka miejsc, które widziałem wcześniej, zawierały pliki do zarządzania wdrożeniem. Zazwyczaj stosowali strategię, taką jak wycinanie połowy serwerów WWW z modułu równoważenia obciążenia, czekanie, zatrzymywanie tej połowy, wdrażanie kodu, restartowanie ich, a następnie odwracanie modułu równoważenia obciążenia, czekanie, zatrzymywanie drugiej połowy, restartowanie ich, a następnie przywracanie modułu równoważenia obciążenia w górę.

We wszystkich miejscach, w których pracowałem, wdrażanie kodu było albo pojedynczym poleceniem, albo brak tego polecenia był rozpoznawany jako problem do rozwiązania.


1

Zazwyczaj używamy do rozwiązania tego problemu w naszych witrynach internetowych narzędzia dołączonego do Systems Wewnętrznych o nazwie junction.

Za pomocą tego narzędzia jesteśmy w stanie tworzyć linki z jednego katalogu do drugiego. Katalog główny aplikacji na serwerze zawiera 3 foldery. Czerwony, niebieski, bieżący. Usługi IIS są skonfigurowane tak, aby zawsze sprawdzały bieżące pliki.

Możesz wydać polecenie junction current, które powie ci, na który folder jest aktualnie wskazywany. Powiedz na przykład, że obecnie wskazuje na niebieski. To, co zrobilibyśmy, to umieszczenie plików w kolejce na czerwono do nowego wdrożenia i upewnienie się, że cała konfiguracja jest gotowa do pracy.

Gdy będziemy gotowi, możemy wydać polecenie, junction current redaby zostało ponownie wskazane.

Są dwie rzeczy, które sprawiają, że to rozwiązanie jest tak świetne

1) Cały czas masz na świecie kolejkowanie zmian w folderze. Bez pośpiechu, a jedyny czas przestoju występuje, gdy pula aplikacji się rozkręca. (Istnieje również sposób na wstępne skompilowanie tego kroku.)

2) Jeśli coś pójdzie nie tak z twoim wdrożeniem, wszystko, co musisz zrobić, aby cofnąć, to wydać polecenie zamiast próbować cofnąć zmiany. Polecenie w naszym przypadku byłobyjunction current blue

Mamy nadzieję, że nasz sposób działania może rzucić nieco światła na nowe rozwiązanie dla Ciebie.


0

Co zrobiłem i nie jestem pewien, czy masz na to pole, ale proszę bardzo. Deweloper sprawdzałby kod w gałęzi QA, a następnie byłby ładowany do środowiska QA przez inżyniera systemowego, a po przejściu kontroli jakości byłby promowany do gałęzi produkcyjnej. W tym przypadku co najmniej 2 z każdej strony podłączonej do serwera korzystało z funkcji równoważenia obciążenia i wyrównania, jeden z dwóch serwerów zostałby wyłączony, tzn. Zatrzymano by witrynę, została zarchiwizowana, a nowa witryna została wdrożona wraz z wszelkie wymagane zmiany iis zostaną ponownie uruchomione, a następnie przejdziesz na następny serwer. To wszystko zostało napisane w skrypcie przy użyciu C # w naszym przypadku, ale zrobiono to w przeszłości przy użyciu skryptu vb. Mam nadzieję że to pomogło. Twoje zdrowie

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.