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:
- Konto platformy Azure z aktywną subskrypcją. Utwórz konto bezpłatnie.
- Konto usługi GitHub. Jeśli nie masz takiego konta, zarejestruj się bezpłatnie.
- Repozytorium GitHub do przechowywania szablonów usługi Resource Manager i plików przepływu pracy. Aby go utworzyć, zobacz Tworzenie nowego repozytorium.
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.
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-id
elementemappId
. Elementid
jestAPPLICATION-OBJECT-ID
używany do tworzenia poświadczeń federacyjnych przy użyciu wywołań interfejsu API programu Graph. Zapisz wartość do użycia jakoAZURE_CLIENT_ID
wpis tajny usługi GitHub później.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ługiid
jest używana jako wartość argumentu--assignee-object-id
waz 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 doAZURE_TENANT_ID
późniejszego użycia.az ad sp create --id $appId
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
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
lubrepo: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
.
- Zadania w środowisku funkcji GitHub Actions:
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" ] }
- Zastąp element
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ą.
W usłudze GitHub przejdź do repozytorium.
Przejdź do pozycji Ustawienia w menu nawigacji.
Wybierz pozycję Wpisy tajne zabezpieczeń > i zmienne > Akcje.
Wybierz pozycję Nowy wpis tajny repozytorium.
Utwórz wpisy tajne dla ,
AZURE_CLIENT_ID
AZURE_TENANT_ID
iAZURE_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 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:
azuredeploy.yaml
Otwórz plik w.github/workflows
repozytorium.Zaktualizuj wartość
AZURE_RESOURCE_GROUP
do nazwy grupy zasobów.Zaktualizuj wartości
WEB_APP_NAME
iSQL_SERVER_NAME
do nazwy aplikacji internetowej i nazwy serwera sql.Przejdź do pozycji Akcje i wybierz pozycję Uruchom przepływ pracy.
Sprawdź, czy akcja została pomyślnie uruchomiona, sprawdzając zielony znacznik wyboru na stronie Akcje .
Dodawanie rejestru kontenerów i wpisów tajnych SQL
W witrynie Azure Portal otwórz nowo utworzoną usługę Azure Container Registry w grupie zasobów.
Przejdź do pozycji Klucze dostępu i skopiuj wartości nazwy użytkownika i hasła.
Utwórz nowe wpisy tajne usługi GitHub i
ACR_USERNAME
ACR_PASSWORD
hasło w repozytorium.W witrynie Azure Portal otwórz bazę danych Azure SQL Database. Otwórz pozycję Parametry połączenia i skopiuj wartość.
Utwórz nowy wpis tajny dla elementu
SQL_CONNECTION_STRING
. Zastąp{your_password}
ciągiemSQL_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:
build-deploy.yaml
Otwórz plik w.github/workflows
repozytorium.Sprawdź, czy zmienne środowiskowe dla
AZURE_RESOURCE_GROUP
parametrów iWEB_APP_NAME
są zgodne z tymi w plikuazuredeploy.yaml
.ACR_LOGIN_SERVER
Zaktualizuj wartość serwera logowania usługi Azure Container Registry.