Jenkins do automatyzacji wdrażania aplikacji ASP.NET

13

Czy istnieje możliwość zautomatyzowania / półautomatycznego wdrażania aplikacji internetowych ASP.NET przy użyciu Jenkins. Może być w kontrolowanym lub niekontrolowanym środowisku, ponieważ niekontrolowany użytkownik musi wprowadzić identyfikator użytkownika i hasło. Szukam sposobów kopiowania plików z miejsca docelowego do miejsca docelowego i uruchamiania skryptów SQL w scenariuszu farmy internetowej.

Edytuj Obecnie używamy plików nietoperzy do xcopy / skonfigurowania puli aplikacji / sql cmd itp. Do wdrożenia aplikacji. Ale aby to zadziałało, zespół wsparcia produkcji musi pobrać kod źródłowy, zbudować projekt i uruchomić pliki nietoperzy w celu wdrożenia aplikacji.

Teraz chcemy zautomatyzować wdrożenie bez pobierania kodu źródłowego, a użytkownik końcowy musi tylko odwiedzić adres URL i podać parametry identyfikatora użytkownika i hasła oraz wybrać tag svn, który powinien zostać wdrożony. Ale Jenkins działa z anonimowym logowaniem, więc istniejący plik nietoperza nie będzie działał, ponieważ nie ma uprawnień do uruchamiania skryptu.

Chciałbym więc wiedzieć, czy istnieją jakieś alternatywy dla tego rodzaju sytuacji. Dobrze będzie, jeśli podszyw się pod kontekst użytkownika za pomocą wprowadzonego identyfikatora użytkownika i hasła, umożliwiając uruchomienie istniejącego pliku wsadowego bez dalszych zmian. Jeśli nie jest to możliwe, chcielibyśmy również zbadać inne pomysły, ale nie mamy elastyczności, aby wybrać zautomatyzowane narzędzie, takie jak marionetka itp., Powinniśmy trzymać się tych plików wsadowych.

Słoneczny
źródło
Udostępnianie badań pomaga wszystkim. Powiedz nam, co próbowałeś i dlaczego nie spełnia twoich potrzeb. To pokazuje, że poświęciłeś trochę czasu, aby spróbować sobie pomóc, oszczędza nam to powtarzania oczywistych odpowiedzi, a przede wszystkim pomaga uzyskać bardziej konkretną i odpowiednią odpowiedź. Również zobaczyć jak zapytać
komar
Zaktualizuj moje pytanie, daj mi znać, jeśli będę musiał podać dodatkowe informacje.
Słoneczny

Odpowiedzi:

11

Podzielę się tym, z czego korzystaliśmy, i gdzie zamierzamy jechać, może pomoże ci to uzyskać lepszy pomysł.

  • Obecnie używamy razem Jenkinsa i Githuba - gdy coś zostanie scalone w mistrza, Github mówi Jenkinsowi i rozpoczyna kompilację.
  • Używamy skryptu Nant na Jenkins do zbudowania projektu, przeprowadzenia testów jednostkowych, a jeśli wszystko wygląda dobrze, uruchamia kolejny projekt Jenkins. Skrypt Nant wyrzuca również katalog z w pełni skompilowanym kodem / zminimalizowanym CSS / JS itp.
  • Drugi projekt Jenkins pobiera dane wyjściowe z kompilacji i przesyła je z powrotem do Github, w osobnym repozytorium.
  • Plik .BAT jest uruchamiany co 5 minut na pomostowym serwerze sieci Web i zasadniczo sprawdza dostępność aktualizacji tego repozytorium. Jeśli zostanie znaleziona aktualizacja, pobieramy najnowszą kompilację, wykonujemy kopię zapasową plików pomostowych, a następnie wdrażamy najnowszą kompilację w folderze pomostowym.
  • Aby przejść na żywo, mamy plik .BAT, który obsługuje tworzenie kopii zapasowych plików na żywo i kopiowanie plików repozytorium na pliki na żywo. Jest uruchamiany ręcznie. Nie obsługuje aktualizacji SQL (robimy to ręcznie).

Oczywiście nie jest to do końca idealne, ale działa dla nas. W przyszłości chcemy to rozszerzyć na:

  • Użyj narzędzia Web Deploy do wypchnięcia plików z Jenkinsa bezpośrednio do IIS i wykonaj wszelkie inne polecenia, które musimy uruchomić.
  • Użyj automatycznych migracji (funkcja Entity Framework), aby obsłużyć wszystkie aktualizacje SQL, jako część uruchomienia.
Mikołaj
źródło
To prawie to samo, co śledzimy. Zastanawiałem się jednak, czy Web Deploy może zainstalować usługi systemu Windows itp. I wszystko, co potrzebne do złożonych aplikacji internetowych. Obecnie używamy narzędzi ps i działa dobrze. W przypadku DB planujemy użyć narzędzia DeployDB.
Słoneczny
Jak radzisz sobie z sytuacjami, gdy IIS blokuje pliki? Jak radzisz sobie z sytuacjami, gdy ktoś pracuje z Twoją aplikacją. Czy masz wiele węzłów lub po prostu psujesz aplikację dla użytkowników pracujących w momencie publikacji?
Piotr Perak,
1
@Peri - zapomniałem wspomnieć w mojej oryginalnej odpowiedzi, ale planujemy mieć dwa serwery produkcyjne i przełączać się między nimi w razie potrzeby (przy użyciu IIS lub nginx). Pozwoli nam to „rozgrzać” drugi serwer na żywo, gdy nastąpi wdrożenie, a następnie przełączyć się na niego, aby nie było zauważalnego przestoju.
Nicholas
4

Już używam Jenkins dla aplikacji .Net i TFS.

  1. Dodaj wymaganą konfigurację do swojego projektu oraz transformację i zamelduj kod.
  2. Pobierz najnowszą wersję z TFS (użyj wtyczki TFS)
  3. Zbuduj projekt (użyj wtyczki MSBuild). możesz opublikować kod z Msbuild przy użyciu argumentów wiersza poleceń.
  4. Zsynchronizuj kod z miejsca publikacji do miejsca docelowego za pomocą polecenia msdeploy.exe (znajdującego się w folderze „C: \ Program Files (x86) \ IIS \ Microsoft Web Deploy V2 \ msdeploy.exe”)
  5. Możesz wysyłać e-maile i wykonywać kopie zapasowe również za pośrednictwem Jenkins.

Możesz także użyć MSTest.exe do wykonania testu jednostkowego i pokazania go w konsoli jenkin lub opublikowania wyniku testu.

Sanjeev Kumar
źródło