Udostępnij za pośrednictwem


Samouczek: używanie funkcji GitHub Actions do wdrażania w niestandardowym kontenerze usługi App Service i nawiązywania połączenia z bazą danych

Ten samouczek przeprowadzi Cię przez proces konfigurowania przepływu pracy funkcji GitHub Actions w celu wdrożenia konteneryzowanej aplikacji ASP.NET Core z zapleczem usługi Azure SQL Database . Po zakończeniu masz aplikację ASP.NET działającą na platformie Azure i połączoną z usługą SQL Database. Najpierw utworzysz zasoby platformy Azure przy użyciu przepływu pracy funkcji GitHub Actions szablonu usługi ARM.

Z tego samouczka dowiesz się, jak wykonywać następujące czynności:

  • Używanie przepływu pracy funkcji GitHub Actions do dodawania zasobów do platformy Azure przy użyciu szablonu usługi Azure Resource Manager (szablonu usługi ARM)
  • Używanie przepływu pracy funkcji GitHub Actions do tworzenia kontenera z najnowszymi zmianami aplikacji internetowej

Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto platformy Azure.

Wymagania wstępne

Do ukończenia tego samouczka potrzebne są następujące elementy:

Pobierz przykład

Rozwidlenie przykładowego projektu w repozytorium Przykładów platformy Azure.

https://github.com/Azure-Samples/dotnetcore-containerized-sqldb-ghactions/

Tworzenie grupy zasobów

Otwórz usługę Azure Cloud Shell pod adresem https://shell.azure.com. Alternatywnie możesz użyć interfejsu wiersza polecenia platformy Azure, jeśli zainstalowano go lokalnie. (Aby uzyskać więcej informacji na temat usługi Cloud Shell, zobacz Omówienie usługi Cloud Shell).

    az group create --name {resource-group-name} --location {resource-group-location}

Generowanie poświadczeń wdrożenia

OpenID Connect to metoda uwierzytelniania, która używa tokenów krótkotrwałych. Konfigurowanie programu OpenID Connect za pomocą funkcji GitHub Actions jest bardziej złożonym procesem, który oferuje zabezpieczenia ze wzmocnionymi zabezpieczeniami.

  1. Jeśli nie masz istniejącej aplikacji, zarejestruj nową aplikację Microsoft Entra ID i jednostkę usługi, która może uzyskiwać dostęp do zasobów.

    az ad app create --display-name myApp
    

    To polecenie zwróci kod JSON z elementem , który jest twoim client-idelementem appId . Element id jest APPLICATION-OBJECT-ID używany do tworzenia poświadczeń federacyjnych przy użyciu wywołań interfejsu API programu Graph. Zapisz wartość do użycia jako AZURE_CLIENT_ID wpis tajny usługi GitHub później.

  2. Tworzenie jednostki usługi. Zastąp element $appID identyfikatorem appId z danych wyjściowych JSON.

    To polecenie generuje dane wyjściowe JSON z jednostką usługi id. Jednostka usługi id jest używana jako wartość argumentu --assignee-object-id w az role assignment create poleceniu w następnym kroku.

    Skopiuj element appOwnerOrganizationId z danych wyjściowych JSON, aby użyć go jako wpisu tajnego usługi GitHub do AZURE_TENANT_ID późniejszego użycia.

     az ad sp create --id $appId
    
  3. Utwórz nowe przypisanie roli dla jednostki usługi. Domyślnie przypisanie roli będzie powiązane z domyślną subskrypcją. Zastąp $subscriptionId ciąg identyfikatorem subskrypcji, $resourceGroupName nazwą grupy zasobów i $servicePrincipalId nowo utworzonym identyfikatorem jednostki usługi.

    az role assignment create --role contributor --subscription $subscriptionId --assignee-object-id  $servicePrincipalId --assignee-principal-type ServicePrincipal --scope /subscriptions/$subscriptionId/resourceGroups/$resourceGroupName
    
  4. Uruchom następujące polecenie, aby utworzyć nowe poświadczenie tożsamości federacyjnej dla aplikacji Microsoft Entra ID.

    • Zastąp element APPLICATION-OBJECT-ID objectId (wygenerowany podczas tworzenia aplikacji) dla aplikacji Microsoft Entra ID.
    • Ustaw wartość dla elementu , CREDENTIAL-NAME aby odwoływać się później.
    • Ustaw wartość subject. Wartość tej wartości jest definiowana przez usługę GitHub w zależności od przepływu pracy:
      • Zadania w środowisku funkcji GitHub Actions: repo:< Organization/Repository >:environment:< Name >
      • W przypadku zadań, które nie są powiązane ze środowiskiem, dołącz ścieżkę ref dla gałęzi/tagu na podstawie ścieżki ref używanej do wyzwalania przepływu pracy: repo:< Organization/Repository >:ref:< ref path>. Na przykład: repo:n-username/ node_express:ref:refs/heads/my-branch lub repo:n-username/ node_express:ref:refs/tags/my-tag.
      • W przypadku przepływów pracy wyzwalanych przez zdarzenie żądania ściągnięcia: repo:< Organization/Repository >:pull_request.
    az ad app federated-credential create --id <APPLICATION-OBJECT-ID> --parameters credential.json
    ("credential.json" contains the following content)
    {
        "name": "<CREDENTIAL-NAME>",
        "issuer": "https://token.actions.githubusercontent.com",
        "subject": "repo:octo-org/octo-repo:environment:Production",
        "description": "Testing",
        "audiences": [
            "api://AzureADTokenExchange"
        ]
    }
    

Aby dowiedzieć się, jak utworzyć aplikację usługi Active Directory, jednostkę usługi i poświadczenia federacyjne w witrynie Azure Portal, zobacz Connect GitHub and Azure (Łączenie usług GitHub i Azure).

Konfigurowanie wpisu tajnego usługi GitHub na potrzeby uwierzytelniania

Musisz podać identyfikator klienta aplikacji, identyfikator dzierżawy i identyfikator subskrypcji do akcji logowania. Te wartości można podać bezpośrednio w przepływie pracy lub przechowywać w wpisach tajnych usługi GitHub i odwoływać się do nich w przepływie pracy. Zapisanie wartości jako wpisów tajnych usługi GitHub jest bezpieczniejszą opcją.

  1. W usłudze GitHub przejdź do repozytorium.

  2. Przejdź do pozycji Ustawienia w menu nawigacji.

  3. Wybierz pozycję Wpisy tajne zabezpieczeń > i zmienne > Akcje.

    Zrzut ekranu przedstawiający dodawanie wpisu tajnego

  4. Wybierz pozycję Nowy wpis tajny repozytorium.

  5. Utwórz wpisy tajne dla , AZURE_CLIENT_IDAZURE_TENANT_IDi AZURE_SUBSCRIPTION_ID. Użyj tych wartości z aplikacji Microsoft Entra dla wpisów tajnych usługi GitHub:

    Wpis tajny usługi GitHub Aplikacja Microsoft Entra
    AZURE_CLIENT_ID Identyfikator aplikacji (klient)
    AZURE_TENANT_ID Identyfikator katalogu (dzierżawcy)
    AZURE_SUBSCRIPTION_ID Identyfikator subskrypcji
  6. Zapisz każdy wpis tajny, wybierając pozycję Dodaj wpis tajny.

Dodawanie wpisu tajnego programu SQL Server

Utwórz nowy wpis tajny w repozytorium dla elementu SQL_SERVER_ADMIN_PASSWORD. Ten wpis tajny może być dowolnym hasłem, które spełnia standardy platformy Azure dotyczące zabezpieczeń haseł. Nie będzie można ponownie uzyskać dostępu do tego hasła, więc zapisz je oddzielnie.

Tworzenie zasobów platformy Azure

Przepływ pracy tworzenia zasobów platformy Azure uruchamia szablon usługi ARM w celu wdrożenia zasobów na platformie Azure. Przepływ pracy:

  • Wyewidencjonuj kod źródłowy za pomocą akcji Wyewidencjonuj.
  • Loguje się do platformy Azure za pomocą akcji Azure Login i zbiera informacje o środowisku i zasobie platformy Azure.
  • Wdraża zasoby za pomocą akcji Wdrażanie usługi Azure Resource Manager.

Aby uruchomić przepływ pracy tworzenia zasobów platformy Azure:

  1. azuredeploy.yaml Otwórz plik w .github/workflows repozytorium.

  2. Zaktualizuj wartość AZURE_RESOURCE_GROUP do nazwy grupy zasobów.

  3. Zaktualizuj wartości WEB_APP_NAME i SQL_SERVER_NAME do nazwy aplikacji internetowej i nazwy serwera sql.

  4. Przejdź do pozycji Akcje i wybierz pozycję Uruchom przepływ pracy.

    Uruchom przepływ pracy funkcji GitHub Actions, aby dodać zasoby.

  5. Sprawdź, czy akcja została pomyślnie uruchomiona, sprawdzając zielony znacznik wyboru na stronie Akcje .

    Pomyślne uruchomienie zasobów tworzenia.

Dodawanie rejestru kontenerów i wpisów tajnych SQL

  1. W witrynie Azure Portal otwórz nowo utworzoną usługę Azure Container Registry w grupie zasobów.

  2. Przejdź do pozycji Klucze dostępu i skopiuj wartości nazwy użytkownika i hasła.

  3. Utwórz nowe wpisy tajne usługi GitHub i ACR_USERNAME ACR_PASSWORD hasło w repozytorium.

  4. W witrynie Azure Portal otwórz bazę danych Azure SQL Database. Otwórz pozycję Parametry połączenia i skopiuj wartość.

  5. Utwórz nowy wpis tajny dla elementu SQL_CONNECTION_STRING. Zastąp {your_password} ciągiem SQL_SERVER_ADMIN_PASSWORD.

Kompilowanie, wypychanie i wdrażanie obrazu

Przepływ pracy kompilacji, wypychania i wdrażania tworzy kontener z najnowszymi zmianami aplikacji, wypycha kontener do usługi Azure Container Registry i aktualizuje miejsce przejściowe aplikacji internetowej, aby wskazywało najnowszy wypchnięty kontener. Kontenery przepływu pracy zadania kompilacji i wdrażania:

  • Zadanie kompilacji sprawdza kod źródłowy za pomocą akcji Wyewidencjonowywanie. Następnie zadanie używa akcji logowania platformy Docker i niestandardowego skryptu do uwierzytelniania w usłudze Azure Container Registry, kompilowania obrazu kontenera i wdrażania go w usłudze Azure Container Registry.
  • Zadanie wdrażania rejestruje się na platformie Azure za pomocą akcji Azure Login i zbiera informacje o środowisku i zasobie platformy Azure. Następnie zadanie aktualizuje ustawienia aplikacji internetowej za pomocą akcji ustawienia usługi aplikacja systemu Azure i wdraża je w miejscu przejściowym usługi App Service za pomocą akcji Azure Web Deploy. Na koniec zadanie uruchamia skrypt niestandardowy, aby zaktualizować bazę danych SQL i zamienić miejsce przejściowe na środowisko produkcyjne.

Aby uruchomić przepływ pracy kompilacji, wypychania i wdrażania:

  1. build-deploy.yaml Otwórz plik w .github/workflows repozytorium.

  2. Sprawdź, czy zmienne środowiskowe dla AZURE_RESOURCE_GROUP parametrów i WEB_APP_NAME są zgodne z tymi w pliku azuredeploy.yaml.

  3. ACR_LOGIN_SERVER Zaktualizuj wartość serwera logowania usługi Azure Container Registry.

Następne kroki