Wdrażanie kontenera niestandardowego w usłudze App Service przy użyciu funkcji GitHub Actions
Artykuł
Funkcja GitHub Actions zapewnia elastyczność tworzenia zautomatyzowanego przepływu pracy tworzenia oprogramowania.
Za pomocą akcji Azure Web Deploy możesz zautomatyzować przepływ pracy, aby wdrożyć niestandardowe kontenery w usłudze App Service przy użyciu funkcji GitHub Actions.
Przepływ pracy jest definiowany przez plik YAML (.yml) w /.github/workflows/ ścieżce w repozytorium. Ta definicja zawiera różne kroki i parametry, które znajdują się w przepływie pracy.
W przypadku przepływu pracy kontenera usługi aplikacja systemu Azure plik zawiera trzy sekcje:
Konto usługi GitHub. Jeśli nie masz takiego konta, zarejestruj się bezpłatnie. Musisz mieć kod w repozytorium GitHub, aby wdrożyć go w usłudze aplikacja systemu Azure Service.
Działający rejestr kontenerów i aplikacja usługi aplikacja systemu Azure Service dla kontenerów. W tym przykładzie użyto usługi Azure Container Registry. Pamiętaj, aby ukończyć pełne wdrożenie w usłudze aplikacja systemu Azure Service dla kontenerów. W przeciwieństwie do zwykłych aplikacji internetowych aplikacje internetowe dla kontenerów nie mają domyślnej strony docelowej. Opublikuj kontener, aby mieć przykład roboczy.
Zalecanym sposobem uwierzytelniania za pomocą usług aplikacja systemu Azure Services for GitHub Actions jest profil publikowania. Możesz również uwierzytelnić się za pomocą jednostki usługi lub programu Open ID Connect, ale proces wymaga wykonania dodatkowych kroków.
Zapisz poświadczenia profilu publikowania lub jednostkę usługi jako wpis tajny usługi GitHub, aby uwierzytelnić się na platformie Azure. Uzyskasz dostęp do wpisu tajnego w przepływie pracy.
Profil publikowania to poświadczenia na poziomie aplikacji. Skonfiguruj profil publikowania jako wpis tajny usługi GitHub.
Przejdź do usługi app service w witrynie Azure Portal.
Na stronie Przegląd wybierz pozycję Pobierz profil publikowania.
Uwaga
Od października 2020 r. aplikacje internetowe systemu Linux będą potrzebować ustawienia WEBSITE_WEBDEPLOY_USE_SCM aplikacji ustawionego truena wartość przed pobraniem pliku. To wymaganie zostanie usunięte w przyszłości. Zobacz Konfigurowanie aplikacji usługi App Service w witrynie Azure Portal, aby dowiedzieć się, jak skonfigurować typowe ustawienia aplikacji internetowej.
Zapisz pobrany plik. Zawartość pliku zostanie użyta do utworzenia wpisu tajnego usługi GitHub.
az ad sp create-for-rbac --name "myApp" --role contributor \
--scopes /subscriptions/<subscription-id>/resourceGroups/<group-name>/providers/Microsoft.Web/sites/<app-name> \
--json-auth
W tym przykładzie zastąp symbole zastępcze identyfikatorem subskrypcji, nazwą grupy zasobów i nazwą aplikacji. Dane wyjściowe to obiekt JSON z poświadczeniami przypisania roli, które zapewniają dostęp do aplikacji usługi App Service. Skopiuj ten obiekt JSON do późniejszego użycia.
Zawsze dobrym rozwiązaniem jest przyznanie minimalnego dostępu. Zakres w poprzednim przykładzie jest ograniczony do określonej aplikacji usługi App Service, a nie całej grupy zasobów.
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.
To polecenie zwróci kod JSON z elementem , który jest twoim client-idelementem appId . Zapisz wartość do użycia jako AZURE_CLIENT_ID wpis tajny usługi GitHub później.
Użyjesz objectId wartości podczas tworzenia poświadczeń federacyjnych przy użyciu interfejsu APPLICATION-OBJECT-IDAPI programu Graph i odwołujesz się do niej jako .
Tworzenie jednostki usługi. Zastąp element $appID identyfikatorem appId z danych wyjściowych JSON.
To polecenie generuje dane wyjściowe JSON z inną objectId wartością i będzie używane w następnym kroku.
objectId Nowy element to assignee-object-id.
Skopiuj element appOwnerTenantId , aby użyć go jako wpisu tajnego usługi GitHub do AZURE_TENANT_ID późniejszego użycia.
az ad sp create --id $appId
Utwórz nowe przypisanie roli według subskrypcji i obiektu. Domyślnie przypisanie roli będzie powiązane z domyślną subskrypcją. Zastąp $subscriptionId ciąg identyfikatorem subskrypcji nazwą $resourceGroupName grupy zasobów i $assigneeObjectId wygenerowaną assignee-object-idwartością . Dowiedz się , jak zarządzać subskrypcjami platformy Azure przy użyciu interfejsu wiersza polecenia platformy Azure.
az role assignment create --role contributor --subscription $subscriptionId --assignee-object-id $assigneeObjectId --assignee-principal-type ServicePrincipal --scopes /subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Web/sites/
Uruchom następujące polecenie, aby utworzyć nowe poświadczenia tożsamości federacyjnej dla aplikacji usługi Active Directory.
Zastąp APPLICATION-OBJECT-ID element objectId (wygenerowany podczas tworzenia aplikacji) dla aplikacji usługi Active Directory.
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 rest --method POST --uri 'https://graph.microsoft.com/beta/applications/<APPLICATION-OBJECT-ID>/federatedIdentityCredentials' --body '{"name":"<CREDENTIAL-NAME>","issuer":"https://token.actions.githubusercontent.com","subject":"repo:organization/repository:ref:refs/heads/main","description":"Testing","audiences":["api://AzureADTokenExchange"]}'
W usłudze GitHub przejrzyj repozytorium. Wybierz pozycję Ustawienia > Wpisy tajne zabezpieczeń > i zmienne > Akcje > Nowy wpis tajny repozytorium.
Aby użyć poświadczeń na poziomie aplikacji, wklej zawartość pobranego pliku profilu publikowania w polu wartości wpisu tajnego. Nadaj kluczowi nazwę wpisu tajnego AZURE_WEBAPP_PUBLISH_PROFILE.
Podczas konfigurowania przepływu pracy usługi GitHub należy użyć AZURE_WEBAPP_PUBLISH_PROFILE akcji wdróż aplikację internetową platformy Azure. Na przykład:
W usłudze GitHub przejrzyj repozytorium. Wybierz pozycję Ustawienia > Wpisy tajne zabezpieczeń > i zmienne > Akcje > Nowy wpis tajny repozytorium.
Aby użyć poświadczeń na poziomie użytkownika, wklej całe dane wyjściowe JSON z polecenia interfejsu wiersza polecenia platformy Azure do pola wartości wpisu tajnego. Nadaj wpisowi tajnemu nazwę, na przykład AZURE_CREDENTIALS.
Podczas późniejszego konfigurowania pliku przepływu pracy należy użyć wpisu tajnego dla danych wejściowych creds akcji Logowania platformy Azure. Na przykład:
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ą.
Otwórz repozytorium GitHub i przejdź do pozycji Ustawienia > Wpisy tajne zabezpieczeń > i zmienne > Akcje > Nowy wpis tajny repozytorium.
Utwórz wpisy tajne dla , AZURE_CLIENT_IDAZURE_TENANT_IDi AZURE_SUBSCRIPTION_ID. Użyj tych wartości z aplikacji usługi Active Directory dla wpisów tajnych usługi GitHub. Te wartości można znaleźć w witrynie Azure Portal, wyszukując aplikację usługi Active Directory.
Wpis tajny usługi GitHub
Aplikacja usługi Active Directory
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.
Konfigurowanie wpisów tajnych usługi GitHub dla rejestru
Zdefiniuj wpisy tajne do użycia z akcją Logowanie do platformy Docker. W przykładzie w tym dokumencie użyto usługi Azure Container Registry dla rejestru kontenerów.
Przejdź do kontenera w witrynie Azure Portal lub na platformie Docker i skopiuj nazwę użytkownika i hasło. Nazwę użytkownika i hasło usługi Azure Container Registry można znaleźć w witrynie Azure Portal w obszarze Ustawienia>Klucze dostępu dla rejestru.
Zdefiniuj nowy wpis tajny dla nazwy użytkownika rejestru o nazwie REGISTRY_USERNAME.
Zdefiniuj nowy wpis tajny dla hasła rejestru o nazwie REGISTRY_PASSWORD.
Kompilowanie obrazu kontenera
W poniższym przykładzie pokazano część przepływu pracy, który tworzy obraz platformy Docker Node.js. Zaloguj się do prywatnego rejestru kontenerów przy użyciu usługi Docker Login . W tym przykładzie użyto usługi Azure Container Registry, ale ta sama akcja działa w przypadku innych rejestrów.
Możesz również użyć logowania do platformy Docker, aby zalogować się do wielu rejestrów kontenerów w tym samym czasie. Ten przykład obejmuje dwa nowe wpisy tajne usługi GitHub do uwierzytelniania za pomocą docker.io. W przykładzie przyjęto założenie, że na poziomie głównym rejestru znajduje się plik Dockerfile.
W poniższym przykładzie przedstawiono część przepływu pracy, który tworzy obraz platformy Docker systemu Windows. Zaloguj się do prywatnego rejestru kontenerów przy użyciu usługi Docker Login . W tym przykładzie użyto usługi Azure Container Registry, ale ta sama akcja działa w przypadku innych rejestrów.
Możesz również użyć logowania do platformy Docker, aby zalogować się do wielu rejestrów kontenerów w tym samym czasie. Ten przykład obejmuje dwa nowe wpisy tajne usługi GitHub do uwierzytelniania za pomocą docker.io. W przykładzie przyjęto założenie, że na poziomie głównym rejestru znajduje się plik Dockerfile.
Aby wdrożyć obraz w kontenerze niestandardowym w usłudze App Service, użyj azure/webapps-deploy@v2 akcji . Ta akcja ma siedem parametrów:
Parametr
Wyjaśnienie
nazwa aplikacji
(Wymagane) Nazwa aplikacji usługi App Service
profil publikowania
(Opcjonalnie) Dotyczy usług Web Apps (Windows i Linux) i Web App Containers(linux). Scenariusz z wieloma kontenerami nie jest obsługiwany. Zawartość pliku profilu publikowania (*.publishsettings) przy użyciu wpisów tajnych funkcji Web Deploy
nazwa miejsca
(Opcjonalnie) Wprowadź istniejące miejsce inne niż miejsce produkcyjne
pakiet
(Opcjonalnie) Dotyczy tylko aplikacji internetowej: ścieżka do pakietu lub folderu. *.zip, *.war, *.jar lub folder do wdrożenia
Obrazów
(Wymagane) Dotyczy tylko kontenerów aplikacji internetowej: określ w pełni kwalifikowaną nazwę obrazów kontenera. Na przykład "myregistry.azurecr.io/nginx:latest" lub "python:3.7.2-alpine/". W przypadku aplikacji z wieloma kontenerami można podać wiele nazw obrazów kontenera (rozdzielonych wieloma wierszami)
plik konfiguracji
(Opcjonalnie) Dotyczy tylko kontenerów aplikacji internetowej: ścieżka pliku Docker-Compose. Powinna być w pełni kwalifikowaną ścieżką lub w stosunku do domyślnego katalogu roboczego. Wymagane w przypadku aplikacji wielokontenerowych.
startup-command
(Opcjonalnie) Wprowadź polecenie uruchamiania. Na przykład dotnet run lub dotnet filename.dll
Zestaw akcji pogrupowanych w różne repozytoria można znaleźć w usłudze GitHub, z których każda zawiera dokumentację i przykłady, które ułatwiają korzystanie z usługi GitHub na potrzeby ciągłej integracji/ciągłego wdrażania i wdrażania aplikacji na platformie Azure.
Utwórz dwa przepływy pracy wdrażania przy użyciu funkcji GitHub Actions i platformy Microsoft Azure. Dowiedz się więcej o wyzwalaniu przepływu pracy ciągłego wdrażania i przechowywaniu poświadczeń.
Twórz kompleksowe rozwiązania na platformie Microsoft Azure, aby tworzyć usługi Azure Functions, implementować aplikacje internetowe i zarządzać nimi, opracowywać rozwiązania korzystające z usługi Azure Storage i nie tylko.