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:
- Wprowadź zmiany w kodzie.
- Push to Git.
- Zdalny pulpit do serwera.
- Wyciągnij z Git.
- 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:
- 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.
- 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)
- 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:
- Wprowadź zmiany w kodzie
- Push to Git
- Zdalny pulpit do serwera
- Wyciągnij z Git
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 .
źródło
Odpowiedzi:
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
źródło
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.htm
w 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.źródło
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.
źródło
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”.
źródło
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:
Spójrz na TeamCity (lub inne podobne narzędzie).
źródło
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.
źródło
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.
źródło
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.
źródło
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 red
aby 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łoby
junction current blue
Mamy nadzieję, że nasz sposób działania może rzucić nieco światła na nowe rozwiązanie dla Ciebie.
źródło
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
źródło