Samouczek: wdrażanie aplikacji ASP.NET Core i bazy danych w usłudze Azure Container Apps przy użyciu funkcji GitHub Actions

Z tego samouczka dowiesz się, jak wdrożyć aplikację ASP.NET Core i usługę SQL Database w usłudze Azure Container Apps przy użyciu programu Visual Studio i funkcji GitHub Actions. Dowiesz się również, jak zarządzać migracjami platformy Entity Framework i aktualizacjami baz danych w funkcji GitHub Actions, chociaż koncepcje mogą być również stosowane do innych narzędzi i środowisk ciągłej integracji/ciągłego wdrażania.

Wymagania wstępne

Potrzebny jest program Visual Studio 2022 zainstalowany z pakietem roboczym ASP.NET i tworzenie aplikacji internetowych oraz tworzenie aplikacji na platformie Azure.

Jeśli masz już zainstalowany program Visual Studio:

  • Zainstaluj najnowsze aktualizacje w programie Visual Studio, wybierając pozycję Sprawdzanie pomocy>pod kątem Aktualizacje.
  • Sprawdź, czy obciążenia deweloperskie ASP.NET i tworzenie aplikacji internetowych oraz tworzenie aplikacji na platformie Azure są instalowane, wybierając pozycję Narzędzia Pobierz narzędzia>i funkcje.

Konfigurowanie przykładowej aplikacji lokalnie

Skorzystaj z przykładowej aplikacji ToDo, aby wykonać czynności opisane w tym samouczku. Sklonuj aplikację z usługi GitHub przy użyciu następującego polecenia:

git clone https://github.com/Azure-Samples/msdocs-app-service-sqldb-dotnetcore.git
cd msdocs-app-service-sqldb-dotnetcore

Przejdź do folderu projektu i otwórz DotNetCoreSqlDb.sln rozwiązanie w programie Visual Studio.

Aplikacja ToDo jest gotowa do użycia, ale musisz ustanowić połączenie z localdb serwerem SQL dostępnym w programie Visual Studio. Połączenie, aby localdb umożliwić uruchamianie aplikacji i utrwalanie zadań do wykonania podczas pracy lokalnej.

  1. Kliknij prawym przyciskiem myszy węzeł usługi Połączenie w Eksploratorze rozwiązań programu Visual Studio i wybierz polecenie Dodaj > bazę danych programu SQL Server.
  2. W oknie dialogowym Połączenie zależności wybierz pozycję SQL Server Express LocalDB (lokalny), a następnie wybierz przycisk Dalej.
  3. W oknie dialogowym Połączenie do programu SQL Server Express LocalDB (local) ustaw następujące wartości:
    • nazwa ciągu Połączenie ion: pozostaw wartość domyślną.
    • wartość ciągu Połączenie ion: pozostaw wartość domyślną.
    • Zapisz parametry połączenia wartość w: Wybierz pozycję Brak.
    • Wybierz Dalej
  4. Na ekranie Podsumowanie zmian pozostaw wartości domyślne ustawień i wybierz pozycję Zakończ , aby ukończyć przepływ pracy.

Program Visual Studio wyświetla podsumowanie zależności usługi, w tym połączenie z LocalDBusługą .

A screenshot showing how to add a migration using Visual Studio.

Następnie należy utworzyć początkową migrację i użyć jej do zaktualizowania lokalnej bazy danych przy użyciu poprawnego schematu dla aplikacji zadań do wykonania.

  1. Wybierz ikonę ... po prawej stronie listy zależności usługi obok LocalDB połączenia, a następnie wybierz pozycję Dodaj migrację.
  2. W oknie dialogowym Migracje platformy Entity Framework zaczekaj chwilę na zlokalizowanie DbContext klasy uwzględnionej w projekcie programu Visual Studio. Po załadowaniu wartości wybierz pozycję Zakończ.
  3. Program Visual Studio generuje Migrations folder w projekcie i tworzy początkową klasę migracji. Ta klasa może służyć do aktualizowania bazy danych przy użyciu poprawnego schematu.
  4. Wybierz ponownie ikonę ... obok LocalDB usługi, a następnie wybierz pozycję Aktualizuj bazę danych.
  5. W oknie dialogowym Migracje programu Entity Framework zaczekaj chwilę na ponowne zlokalizowanie DbContext klasy w programie Visual Studio, a następnie wybierz pozycję Zakończ. Program Visual Studio uruchom migrację i utwórz schemat bazy danych na LocalDB serwerze.

Uruchom projekt, wybierając przycisk Uruchamiania DotNetCoreSqlDb w górnej części programu Visual Studio.

Po załadowaniu aplikacji sprawdź, czy baza danych działa poprawnie, wprowadzając nową czynność do wykonania. Todo zostanie wyświetlone w widoku głównej listy na stronie głównej aplikacji.

Eksplorowanie konfiguracji uruchamiania aplikacji

Przykładowa aplikacja zawiera następujący kod w Program.cs pliku:

if(builder.Environment.IsDevelopment())
{
    builder.Services.AddDbContext<MyDatabaseContext>(options =>
        options.UseSqlServer(builder.Configuration.GetConnectionString("Default")));
}
else
{
    builder.Services.AddDbContext<MyDatabaseContext>(options =>
        options.UseSqlServer(Environment.GetEnvironmentVariable("AZURE_SQL_CONNECTIONSTRING")));
}

Ten kod stosuje następujące konfiguracje:

  • Gdy aplikacja działa lokalnie, localdb parametry połączenia jest pobierana z appsettings.json pliku i dostarczana do programu Entity Framework. Ta konfiguracja umożliwia localdb sprawdzenie parametry połączenia kontroli źródła, dzięki czemu inni deweloperzy mogą łatwo łączyć się z lokalną bazą danych podczas programowania. Umożliwia również lokalne uruchamianie migracji programu Entity Framework. Domyślnie program Entity Framework nie odnajduje parametry połączenia przechowywanych w zmiennej środowiskowej podczas uruchamiania migracji.
  • Gdy aplikacja działa w przepływach pracy funkcji GitHub Actions lub w środowisku produkcyjnym, parametry połączenia jest pobierana ze zmiennych środowiskowych. Zmienne środowiskowe mogą zapobiec zaewidencjonowaniu parametry połączenia produkcyjnych w kontroli źródła lub dołączaniu ich do plików konfiguracji.

Tworzenie usług platformy Azure

Aplikacja będzie wymagać utworzenia następujących usług platformy Azure w celu pomyślnego wdrożenia:

  • Aplikacja kontenera: wymagane do hostowania i uruchamiania wdrożonej aplikacji.
  • Container Registry: przechowuje utworzony artefakt obrazu aplikacji konteneryzowanej.
  • SQL Database: baza danych Azure SQL Database do przechowywania danych aplikacji.

Funkcje publikowania programu Visual Studio mogą obsługiwać tworzenie tych zasobów.

Tworzenie aplikacji kontenera platformy Azure i usługi Azure Container Registry

  1. W Eksploratorze rozwiązań programu Visual Studio kliknij prawym przyciskiem myszy węzeł projektu najwyższego poziomu i wybierz pozycję Publikuj.

  2. W oknie dialogowym publikowania wybierz pozycję Azure jako element docelowy wdrożenia, a następnie wybierz pozycję Dalej.

  3. Dla określonego elementu docelowego wybierz pozycję Azure Container Apps (Linux), a następnie wybierz pozycję Dalej.

  4. Utwórz nową aplikację kontenera do wdrożenia. Wybierz przycisk + Utwórz nowy, aby otworzyć nowe okno dialogowe i wprowadź następujące wartości:

    A screenshot showing how to create a container app.

    • Nazwa aplikacji kontenera: pozostaw wartość domyślną lub wprowadź nazwę.
    • Nazwa subskrypcji: wybierz subskrypcję do wdrożenia.
    • Grupa zasobów: wybierz pozycję Nowy i utwórz nową grupę zasobów o nazwie msdocs-app-db-ef.
    • Środowisko aplikacji kontenera: wybierz pozycję Nowy , aby otworzyć okno dialogowe środowiska aplikacji kontenera i wprowadzić następujące wartości:
      • Nazwa środowiska: Zachowaj wartość domyślną.
      • Lokalizacja: wybierz lokalizację w pobliżu.
      • Obszar roboczy usługi Azure Log Analytics: wybierz pozycję Nowy , aby otworzyć okno dialogowe obszaru roboczego usługi Log Analytics.
        • Nazwa: pozostaw wartość domyślną.
        • Lokalizacja: wybierz lokalizację w pobliżu, a następnie wybierz przycisk OK , aby zamknąć okno dialogowe.
      • Wybierz przycisk OK , aby zamknąć okno dialogowe środowiska aplikacji kontenera.
    • Wybierz pozycję Utwórz , aby zamknąć okno dialogowe oryginalnych aplikacji kontenera. Program Visual Studio tworzy zasób aplikacji kontenera na platformie Azure.
  5. Po utworzeniu zasobu upewnij się, że został wybrany na liście aplikacji kontenera, a następnie wybierz pozycję Dalej.

  6. Musisz utworzyć usługę Azure Container Registry, aby przechowywać opublikowany artefakt obrazu dla aplikacji. Wybierz zieloną + ikonę na ekranie rejestru kontenerów.

    A screenshot showing how to create a new container registry.

  7. Pozostaw wartości domyślne, a następnie wybierz pozycję Utwórz.

  8. Po utworzeniu rejestru kontenerów upewnij się, że jest zaznaczona, a następnie wybierz pozycję Dalej.

  9. Na ekranie Typ wdrożenia wybierz pozycję Ciągła integracja/ciągłe wdrażanie przy użyciu przepływów pracy funkcji GitHub Actions (generuje plik yml), a następnie wybierz pozycję Zakończ. Jeśli program Visual Studio wyświetli monit o włączenie użytkownika Administracja w celu uzyskania dostępu do opublikowanego kontenera platformy Docker, wybierz pozycję Tak.

Program Visual Studio tworzy i wyświetla profil publikowania. Większość kroków publikowania i szczegółów opisano w pliku GitHub Actions .yml , który można wyświetlić, klikając przycisk Edytuj przepływ pracy w widoku podsumowania profilu publikowania. Ten plik został szczegółowo omówiony w dalszej części artykułu.

Tworzenie bazy danych Azure SQL Database

  1. W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy węzeł Połączenie usług i wybierz polecenie Dodaj > bazę danych programu SQL Server.
  2. W oknie dialogowym Połączenie zależności wybierz pozycję Azure SQL Database, a następnie wybierz pozycję Dalej.
  3. Wybierz pozycję + Utwórz nowy , aby dodać nową bazę danych.
  4. W oknie dialogowym Azure SQL Database wprowadź następujące wartości:
    • Nazwa bazy danych: pozostaw wartość domyślną.
    • Nazwa subskrypcji: wybierz tę samą subskrypcję co poprzednio.
    • Grupa zasobów: wybierz wcześniej utworzoną tę samą msdocs-app-db-ef grupę.
    • Serwer bazy danych: wybierz pozycję Nowy... i wprowadź następujące wartości w nowym oknie podręcznym:
      • Nazwa serwera bazy danych: wprowadź unikatową nazwę serwera lub dołącz losowe liczby na końcu automatycznie wygenerowanej nazwy.
      • Lokalizacja: wybierz lokalizację znajdującą się blisko Ciebie.
      • nazwa użytkownika Administracja istratora: wprowadź wybraną wartość.
      • Administracja istrator hasło: wprowadź wybraną wartość.
      • Administracja istrator hasło (potwierdź): wprowadź to samo hasło, aby potwierdzić. Wybierz przycisk OK , aby zamknąć okno dialogowe programu SQL Server
    • Wybierz pozycję Utwórz , aby utworzyć serwer SQL i bazę danych.
    • Po zakończeniu operacji wybierz serwer z listy, a następnie wybierz pozycję Dalej
  5. W oknie dialogowym Połączenie do usługi Azure SQL Database pozostaw wartości domyślne, ale upewnij się, że w dolnej części opcji Zapisz wartość parametry połączenia jest zaznaczona opcja Brak.
  6. Wybierz pozycję Zakończ , a program Visual Studio utworzy zasoby SQL.

Połączenie aplikacji kontenera do usługi Azure SQL

  1. Na stronie przeglądu utworzonej aplikacji kontenera wybierz pozycję Service Połączenie or (wersja zapoznawcza) w obszarze nawigacji po lewej stronie.

  2. Wybierz pozycję + Utwórz , aby utworzyć nowe połączenie.

  3. W oknie wysuwaym Tworzenie połączenia wprowadź następujące wartości:

    • Kontener: wybierz utworzony kontener dotnetcoresqldb .

    • Typ usługi: wybierz pozycję SQL Database.

    • Subskrypcja: wybierz tę samą subskrypcję, która była używana do utworzenia aplikacji kontenera.

    • nazwa Połączenie ion: pozostaw wartość domyślną.

    • SQL Server: wybierz utworzony wcześniej serwer bazy danych.

    • Baza danych SQL: wybierz utworzoną wcześniej bazę danych.

    • Typ klienta: wybierz pozycję .NET.

      A screenshot showing how to use service connector.

  4. Wybierz pozycję Dalej: Uwierzytelnianie i wprowadź następujące wartości:

    • Wybierz ciąg Połączenie ion dla typu uwierzytelniania.
    • Nazwa użytkownika: wprowadź nazwę użytkownika użytą podczas tworzenia serwera bazy danych.
    • Hasło: wprowadź hasło użyte podczas tworzenia serwera bazy danych.
  5. Pozostaw pozostałe ustawienia domyślne i wybierz pozycję Dalej: Sieć.

  6. Pozostaw wybraną wartość domyślną i wybierz pozycję Dalej: Przejrzyj i utwórz.

  7. Po zweryfikowaniu przez platformę Azure ustawień wybierz pozycję Utwórz.

Po chwili powinno zostać wyświetlone połączenie z bazą danych SQL. Wybierz strzałkę, aby rozwinąć połączenie i wyświetlić wartość AZURE_SQL_CONNECTIONSTRING . Ta nazwa połączenia jest zgodna z nazwą zmiennej środowiskowej parametry połączenia zdefiniowaną w przykładowej aplikacji.

Konfigurowanie przepływu pracy funkcji GitHub Actions

Plik przepływu pracy funkcji GitHub Actions wygenerowany przez program Visual Studio może służyć przez usługę GitHub do kompilowania i wdrażania aplikacji na platformie Azure po wypchnięciu zmian. Obecnie ten proces zadziała, ale wdrożona aplikacja zgłosi wyjątek. Mimo że baza danych Azure SQL Database została utworzona, należy dodać krok do przepływu pracy funkcji GitHub Actions w celu wygenerowania schematu. Parametry połączenia dla bazy danych Azure SQL Database można bezpiecznie przechowywać jako wpis tajny w usłudze GitHub i pobierany przez przepływ pracy po jego uruchomieniu.

Pobieranie parametry połączenia i dodawanie ich do wpisów tajnych usługi GitHub

  1. W witrynie Azure Portal wyszukaj bazę danych utworzoną na głównym pasku wyszukiwania i wybierz ją z wyników.

  2. Na stronie przeglądu bazy danych wybierz pozycję ciągi Połączenie ion w obszarze nawigacji po lewej stronie.

  3. Na karcie ADO.NET skopiuj parametry połączenia z pola formularza.

    A screenshot showing how to retrieve the connection string.

  4. Przejdź do rozwidlenia repozytorium GitHub aplikacji.

  5. Na karcie Ustawienia wybierz pozycję Akcje wpisy > tajne w obszarze nawigacji po lewej stronie, a następnie wybierz pozycję Nowy wpis tajny repozytorium.

  6. Na stronie Nowy wpis tajny wprowadź następujące wartości:

    • Nazwa: wprowadź nazwę DbConnection.

    • Wpis tajny: wklej parametry połączenia skopiowany z platformy Azure. Pamiętaj, aby zastąpić symbol zastępczy hasła w parametry połączenia hasłem wybranym podczas tworzenia bazy danych.

    • Wybierz przycisk Add secret (Dodaj wpis tajny).

      A screenshot showing how to create a GitHub secret.

Parametry połączenia są teraz bezpiecznie przechowywane w wpisach tajnych repozytorium GitHub i można je pobrać przy użyciu przepływu pracy usługi GitHub.

Modyfikowanie przepływu pracy funkcji GitHub Actions w celu włączenia migracji

  1. Otwórz plik przepływu pracy funkcji GitHub Actions wygenerowany przez program Visual Studio, wybierając przycisk Edytuj przepływ pracy .yml na stronie podsumowania publikowania.

    A screenshot showing how to edit the workflow.

  2. Dołącz następujący kod yaml na końcu pliku przepływu pracy:

    - name: Run EF 
      run: | 
        dotnet tool install --global dotnet-ef
        dotnet tool restore
        dotnet ef database update -p DotNetCoreSqlDb --connection '${{ secrets.DBConnection }}'
    

    Ten kod instaluje narzędzia wiersza polecenia platformy Entity Framework i uruchamia migracje aplikacji. Po uruchomieniu przepływu pracy kod używa connection również parametru database update polecenia, aby zastąpić localdb parametry połączenia przechowywane w appsettings.json pliku wartością dodaną do wpisów tajnych usługi GitHub.

Uruchamianie przepływu pracy funkcji GitHub Actions i testowanie wdrożenia

  1. Zatwierdź zmiany w aplikacji i wypchnij do rozwidlenia repozytorium przy użyciu następującego polecenia:

    git add --all
    git commit -m "Added GitHub Actions workflow"
    git push
    
  2. Przejdź do repozytorium GitHub i wybierz kartę Akcje . Uruchomienie przepływu pracy powinno zostać wyzwolone automatycznie, jeśli wypychanie zakończyło się pomyślnie.

  3. Wybierz aktywny przepływ pracy, aby wyświetlić szczegóły dziennika dla każdego kroku po zakończeniu. Migracja trwa ostatnio, aby zaktualizować bazę danych na platformie Azure.

    A screenshot showing the GitHub action workflow.

Po zakończeniu przepływu pracy aplikacja zostanie wdrożona w usłudze Azure Container Apps i połączona z bazą danych ze zaktualizowanym schematem.

Wdrożenie można przetestować, przechodząc do strony głównej aplikacji kontenera i tworząc todo, podobnie jak lokalnie. Adres URL aplikacji kontenera można zawsze znaleźć na stronie przeglądu aplikacji w witrynie Azure Portal.