Nasz zespół chce mieć możliwość uruchomienia debugera Visual Studio z wdrożonymi instancjami naszej aplikacji ASP.NET w naszym wewnętrznym klastrze Kubernetes. Muszę wymyślić, jak ukończyć układankę, ale nie znam się dobrze na Visual Studio 2019.
- Obraz Docker jest kompilowany z oficjalnymi obrazami .NET Core i ma / vsdbg zapełnione najnowszą wersją (która nie obsługuje --attach).
- Visual Studio współpracuje z moim Docker Desktop.
- Kubectl jest poprawnie skonfigurowany. Do testowania mogę użyć klastra kubernetes dołączonego do Docker Desktop lub naszego wewnętrznego klastra kubernetes.
- Azure nie jest obecnie opcją. Rozumiem z dokumentacji, że Microsoft preferuje właśnie to.
Jak skonfigurować Visual Studio, aby móc to zrobić?
c#
visual-studio
kubernetes
visual-studio-debugging
Thorbjørn Ravn Andersen
źródło
źródło
Odpowiedzi:
Ok. Zacznijmy to. Przede wszystkim upewnij się, że opublikowałeś swoją aplikację w trybie debugowania! Wolę używać nowej, wieloetapowej kompilacji z funkcją Docker do budowania moich obrazów, dlatego napisałbym coś takiego na końcu etapu kompilacji w Dockerfile:
Aby przekazać obrazy do Minikube, używam lokalnego rejestru kontenerów, jak opisano tutaj. Ale możesz to zrobić tak jak zwykle. Kiedy już uruchomisz swój kontener, możemy zacząć hakować do niego. W tym celu użyję Powershell, ale to samo można łatwo przepisać w dowolnym innym języku terminali. Możesz postępować zgodnie z samouczkiem krok po kroku i wykonywać polecenia w terminalu jeden po drugim, sprawdzając wartości var za pomocą polecenia echo, jeśli to konieczne. W pliku * .yml powinieneś mieć selektor opisujący coś takiego:
Chwyć go i użyj, aby zdefiniować zmienną $ Selector w swoim terminalu PowerShell:
Musisz znaleźć kapsułę, w której aplikacja kontenerowa jest uruchomiona przez selektor:
Zakładając, że masz teraz tylko jeden pojemnik na kapsułce, możesz teraz wykonywać polecenia na tym pojemniku. Domyślnie kontener nie ma zainstalowanego vsdbg, więc zainstaluj go:
Następnie musisz znaleźć PID swojej aplikacji wewnątrz kontenera:
Zwykle jest równa 1, ale lepiej przyjąć mniej założeń. Otóż to. Teraz możesz uruchomić debugger:
Nie zapomnij wykonać następujących poleceń przed zamknięciem okna, w przeciwnym razie aplikacja utknie na zawsze:
Złóżmy wszystko razem, stwórz skrypt wielokrotnego użytku i zapisz go gdzieś blisko korzeni, ponieważ możesz go używać ze wszystkimi projektami ASP.NET Core:
Teraz możesz wykonać ten skrypt w ten sposób, gdy terminal działa z folderu skryptów:
Ale czy nie powinniśmy debugować z Visual Studio? Tak! Idźmy dalej i uruchom nasz proces terminalowy z Visual Studio MIEngine. Otwórz swój projekt w Visual Studio. Dodaj nowy plik XML o następującej treści i nazwij go kubedbg.xml:
W
-File
parametrze musisz podać bezwzględną ścieżkę do pliku skryptu, który wcześniej utworzyliśmy. Następnie naciśnij Ctrl + Alt + A, aby otworzyć okno poleceń i uruchom następujące polecenie:Debug.MIDebugLaunch /Executable:dotnet /OptionsFile:absolute_path_to_kubedbg_xml
To polecenie rozpocznie proces debugowania w programie Visual Studio ze wszystkimi standardowymi korzyściami, których można oczekiwać. Ale nie przestawaj debugować w inny sposób niż naciskając Odłącz wszystko z menu debugowania! Chociaż to polecenie nie jest zbyt wygodne do pisania przez cały czas. Na szczęście w Visual Studio możesz określić aliasy dla poleceń z parametrami. W końcu będziesz potrzebować nowegokubedbg.xml
pliku dla każdego projektu. Mając to na uwadze, stwórz swój pierwszy alias, wpisując następujące polecenie w oknie poleceń:Następnie możesz rozpocząć debugowanie, uruchamiając plik kubedbg.mywebapp w oknie poleceń. Jeszcze lepiej możesz uruchomić to samo polecenie z paska narzędzi Znajdź Combobox, ale z prefiksem:
>kubedbg.mywebapp.
Nie jest to trudne, ponieważ istnieje również uzupełnianie tekstu. Możesz przeczytać więcej o aliasach poleceń tutaj. Miłego debugowania! PS: Jako bonus absolutnie w ten sam sposób możesz debugować swoją aplikację, nawet gdy działa w chmurze publicznej. Gdy kubectl jest przypisany do klastra w chmurze publicznej, po prostu działa z tym samym skryptem i spłaca mniej założeń, ponieważ wewnątrz rzeczywistego ID procesu klastra nie jest równy 1źródło
--attach
flaga jest używana w poleceniu kubectl służącym do dołączenia debugera, co mnie trochę niepokoi. Czy możesz potwierdzić, że to zadziałało podczas przygotowywania tej odpowiedzi?