Ciągłe wdrażanie za pomocą kontenerów niestandardowych w usłudze aplikacja systemu Azure Service
W tym samouczku skonfigurujesz ciągłe wdrażanie niestandardowego obrazu kontenera z zarządzanych repozytoriów usługi Azure Container Registry lub docker Hub.
1. Przejdź do Centrum wdrażania
W witrynie Azure Portal przejdź do strony zarządzania dla aplikacji usługi App Service.
W menu po lewej stronie kliknij pozycję Ustawienia centrum>wdrażania.
2. Wybierz źródło wdrożenia
Wybierz źródło wdrożenia zależy od danego scenariusza:
- Usługa Container Registry konfiguruje ciągłą integrację/ciągłe wdrażanie między rejestrem kontenerów a usługą App Service.
- Opcja GitHub Actions jest dla Ciebie, jeśli zachowasz kod źródłowy obrazu kontenera w usłudze GitHub. Wyzwalane przez nowe zatwierdzenia w repozytorium GitHub, akcja wdrażania może zostać uruchomiona
docker build
idocker push
bezpośrednio w rejestrze kontenerów, a następnie zaktualizować aplikację usługi App Service, aby uruchomić nowy obraz. Aby uzyskać więcej informacji, zobacz How CI/CD works with GitHub Actions (Jak działa ciągła integracja/ciągłe wdrażanie w funkcji GitHub Actions). - Aby skonfigurować ciągłą integrację/ciągłe wdrażanie za pomocą usługi Azure Pipelines, zobacz Deploy an Azure Web App Container from Azure Pipelines (Wdrażanie kontenera aplikacji internetowej platformy Azure z usługi Azure Pipelines).
Uwaga
W przypadku aplikacji Docker Compose wybierz pozycję Container Registry.
Jeśli wybierzesz pozycję GitHub Actions, kliknij pozycję Autoryzuj i postępuj zgodnie z monitami autoryzacji. Jeśli wcześniej masz autoryzację w usłudze GitHub, możesz wdrożyć z repozytorium innego użytkownika, klikając pozycję Zmień konto.
Po autoryzczeniu konta platformy Azure za pomocą usługi GitHub wybierz pozycję Organizacja, Repozytorium i Gałąź , z której chcesz wdrożyć.
2. Konfigurowanie ustawień rejestru
3. Konfigurowanie ustawień rejestru
Uwaga
Kontenery przyczepki (wersja zapoznawcza) będą pomyślnie obsługiwać aplikacje wielokontenerowe (Docker Compose) w usłudze App Service. Aby rozpocząć, zobacz Samouczek: konfigurowanie kontenera przyczepki dla kontenera niestandardowego w usłudze aplikacja systemu Azure Service (wersja zapoznawcza).
Aby wdrożyć aplikację z wieloma kontenerami (Docker Compose), wybierz pozycję Docker Compose w polu Typ kontenera.
Jeśli nie widzisz listy rozwijanej Typ kontenera, przewiń z powrotem do pozycji Źródło i wybierz pozycję Rejestr kontenerów.
W polu Źródło rejestru wybierz miejsce, w którym znajduje się rejestr kontenerów. Jeśli nie jest to ani usługa Azure Container Registry, ani Docker Hub, wybierz pozycję Rejestr prywatny.
Uwaga
Jeśli aplikacja z wieloma kontenerami (Docker Compose) używa więcej niż jednego obrazu prywatnego, upewnij się, że obrazy prywatne znajdują się w tym samym rejestrze prywatnym i są dostępne przy użyciu tych samych poświadczeń użytkownika. Jeśli aplikacja z wieloma kontenerami używa tylko obrazów publicznych, wybierz pozycję Docker Hub, nawet jeśli niektóre obrazy nie znajdują się w usłudze Docker Hub.
Wykonaj następne kroki, wybierając kartę zgodną z wybranym wyborem.
Na liście rozwijanej Rejestr są wyświetlane rejestry w tej samej subskrypcji co aplikacja. Wybierz odpowiedni rejestr.
Uwaga
- Jeśli chcesz użyć tożsamości zarządzanych, aby zablokować dostęp usługi ACR, postępuj zgodnie z tym przewodnikiem:
- Aby wdrożyć z rejestru w innej subskrypcji, zamiast tego wybierz pozycję Rejestr prywatny w źródle rejestru.
Wybierz obraz i tag do wdrożenia. Jeśli chcesz, wpisz polecenie uruchamiania w pliku startowym.
Wykonaj następny krok w zależności od typu kontenera:
- W polu Docker Compose wybierz rejestr dla obrazów prywatnych. Kliknij pozycję Wybierz plik, aby przekazać plik Docker Compose lub wklej zawartość pliku Docker Compose do pliku Config.
- W polu Pojedynczy kontener wybierz obraz i tag do wdrożenia. Jeśli chcesz, wpisz polecenie uruchamiania w pliku startowym.
Usługa App Service dołącza ciąg w pliku startowym docker run
na końcu polecenia (jako [COMMAND] [ARG...]
segment) podczas uruchamiania kontenera.
3. Włączanie ciągłej integracji/ciągłego wdrażania
4. Włączanie ciągłej integracji/ciągłego wdrażania
Usługa App Service obsługuje integrację ciągłej integracji/ciągłego wdrażania z usługami Azure Container Registry i Docker Hub. Aby ją włączyć, wybierz pozycję Wł . w obszarze Ciągłe wdrażanie.
Uwaga
Jeśli wybierzesz pozycję GitHub Actions w obszarze Źródło, nie uzyskasz tej opcji, ponieważ ciągła integracja/ciągłe wdrażanie jest obsługiwana bezpośrednio przez funkcję GitHub Actions. Zamiast tego zostanie wyświetlona sekcja Konfiguracja przepływu pracy, w której możesz kliknąć pozycję Plik podglądu, aby sprawdzić plik przepływu pracy. Platforma Azure zatwierdza ten plik w wybranym repozytorium źródłowym GitHub w celu obsługi zadań kompilacji i wdrażania. Aby uzyskać więcej informacji, zobacz How CI/CD works with GitHub Actions (Jak działa ciągła integracja/ciągłe wdrażanie w funkcji GitHub Actions).
Po włączeniu tej opcji usługa App Service dodaje element webhook do repozytorium w usłudze Azure Container Registry lub Docker Hub. Repozytorium publikuje wpisy do tego elementu webhook za każdym razem, gdy wybrany obraz zostanie zaktualizowany przy użyciu polecenia docker push
. Element webhook powoduje ponowne uruchomienie aplikacji usługi App Service i uruchomienie docker pull
go w celu uzyskania zaktualizowanego obrazu.
Uwaga
Aby zapewnić prawidłowe działanie elementu webhook, należy włączyć opcję Podstawowe poświadczenia publikowania uwierzytelniania w aplikacji internetowej. Niepowodzenie tej czynności może spowodować błąd 401 brak autoryzacji dla elementu webhook. Aby sprawdzić, czy włączono podstawowe poświadczenia publikowania uwierzytelniania, wykonaj następujące kroki:
- Przejdź do ustawień ogólnych konfiguracji > aplikacji internetowej.
- Wyszukaj sekcję Ustawienie platformy, w której znajdziesz opcję Podstawowe poświadczenia publikowania uwierzytelniania.
W przypadku innych rejestrów prywatnych możesz ręcznie opublikować element webhook lub jako krok w potoku ciągłej integracji/ciągłego wdrażania. W polu Adres URL elementu webhook kliknij przycisk Kopiuj, aby uzyskać adres URL elementu webhook.
Uwaga
Obsługa aplikacji wielokontenerowych (Docker Compose) jest ograniczona:
- W przypadku usługi Azure Container Registry usługa App Service tworzy element webhook w wybranym rejestrze z rejestrem jako zakresem. Obiekt do
docker push
dowolnego repozytorium w rejestrze (w tym tych, do których nie odwołuje się plik Docker Compose), wyzwala ponowne uruchomienie aplikacji. Możesz zmodyfikować element webhook do węższego zakresu. - Usługa Docker Hub nie obsługuje elementów webhook na poziomie rejestru. Elementy webhook należy dodać ręcznie do obrazów określonych w pliku Docker Compose.
4. Zapisz ustawienia
5. Zapisz ustawienia
Kliknij przycisk Zapisz.
Jak działa ciągła integracja/ciągłe wdrażanie z funkcją GitHub Actions
Jeśli wybierzesz funkcję GitHub Actions w źródle (zobacz Wybieranie źródła wdrożenia), usługa App Service skonfiguruje ciągłą integrację/ciągłe wdrażanie na następujące sposoby:
- Umieszcza plik przepływu pracy funkcji GitHub Actions w repozytorium GitHub w celu obsługi zadań kompilacji i wdrażania w usłudze App Service.
- Dodaje poświadczenia dla rejestru prywatnego jako wpisy tajne usługi GitHub. Wygenerowany plik przepływu pracy uruchamia akcję Azure/docker-login w celu zalogowania się przy użyciu rejestru prywatnego, a następnie uruchamia
docker push
polecenie w celu wdrożenia. - Dodaje profil publikowania aplikacji jako wpis tajny usługi GitHub. Wygenerowany plik przepływu pracy używa tego wpisu tajnego do uwierzytelniania w usłudze App Service, a następnie uruchamia akcję Azure/webapps-deploy w celu skonfigurowania zaktualizowanego obrazu, co wyzwala ponowne uruchomienie aplikacji w celu ściągnięcia zaktualizowanego obrazu.
- Przechwytuje informacje z dzienników uruchamiania przepływu pracy i wyświetla je na karcie Dzienniki w Centrum wdrażania aplikacji.
Możesz dostosować dostawcę kompilacji funkcji GitHub Actions w następujący sposób:
- Dostosuj plik przepływu pracy po jego wygenerowaniu w repozytorium GitHub. Aby uzyskać więcej informacji, zobacz Składnia przepływu pracy dla funkcji GitHub Actions. Upewnij się, że przepływ pracy kończy się akcją Azure/webapps-deploy w celu wyzwolenia ponownego uruchomienia aplikacji.
- Jeśli wybrana gałąź jest chroniona, nadal możesz wyświetlić podgląd pliku przepływu pracy bez zapisywania konfiguracji, a następnie dodać go i wymagane wpisy tajne usługi GitHub do repozytorium ręcznie. Ta metoda nie zapewnia integracji dziennika z witryną Azure Portal.
- Zamiast profilu publikowania należy wdrożyć przy użyciu jednostki usługi w identyfikatorze Entra firmy Microsoft.
Uwierzytelnianie za pomocą jednostki usługi
Ta opcjonalna konfiguracja zastępuje domyślne uwierzytelnianie profilami publikowania w wygenerowanych plikach przepływu pracy.
Wygeneruj jednostkę usługi za pomocą polecenia az ad sp create-for-rbac w interfejsie wiersza polecenia platformy Azure. W poniższym przykładzie zastąp wartości subscription-id>,< group-name i< app-name>> własnymi wartościami.< Zapisz całe dane wyjściowe JSON w następnym kroku, w tym najwyższego poziomu {}
.
az ad sp create-for-rbac --name "myAppDeployAuth" --role contributor \
--scopes /subscriptions/<subscription-id>/resourceGroups/<group-name>/providers/Microsoft.Web/sites/<app-name> \
--json-auth
Ważne
W przypadku zabezpieczeń przyznaj minimalny wymagany dostęp do jednostki usługi. Zakres w poprzednim przykładzie jest ograniczony do określonej aplikacji usługi App Service, a nie całej grupy zasobów.
W usłudze GitHub przejdź do repozytorium, a następnie wybierz pozycję Ustawienia > Wpisy tajne > Dodaj nowy wpis tajny. Wklej całe dane wyjściowe JSON z polecenia interfejsu wiersza polecenia platformy Azure do pola wartości wpisu tajnego. Nadaj wpisowi tajnym nazwę, taką jak AZURE_CREDENTIALS
.
W pliku przepływu pracy wygenerowany przez Centrum wdrażania zrewiduj azure/webapps-deploy
krok za pomocą kodu, jak w poniższym przykładzie:
- name: Sign in to Azure
# Use the GitHub secret you added
- uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: Deploy to Azure Web App
# Remove publish-profile
- uses: azure/webapps-deploy@v2
with:
app-name: '<app-name>'
slot-name: 'production'
images: '<registry-server>/${{ secrets.AzureAppService_ContainerUsername_... }}/<image>:${{ github.sha }}'
- name: Sign out of Azure
run: |
az logout
Automatyzowanie za pomocą interfejsu wiersza polecenia
Aby skonfigurować rejestr kontenerów i obraz platformy Docker, uruchom polecenie az webapp config container set.
az webapp config container set --name <app-name> --resource-group <group-name> --docker-custom-image-name '<image>:<tag>' --docker-registry-server-url 'https://<registry-name>.azurecr.io' --docker-registry-server-user '<username>' --docker-registry-server-password '<password>'
Aby skonfigurować aplikację z wieloma kontenerami (Docker Compose), przygotuj lokalnie plik Docker Compose, a następnie uruchom polecenie az webapp config container set z parametrem --multicontainer-config-file
. Jeśli plik Docker Compose zawiera obrazy prywatne, dodaj --docker-registry-server-*
parametry, jak pokazano w poprzednim przykładzie.
az webapp config container set --resource-group <group-name> --name <app-name> --multicontainer-config-file <docker-compose-file>
Aby skonfigurować ciągłą integrację/ciągłe wdrażanie z rejestru kontenerów do aplikacji, uruchom polecenie az webapp deployment container config z parametrem --enable-cd
. Polecenie zwraca adres URL elementu webhook, ale należy ręcznie utworzyć element webhook w rejestrze w osobnym kroku. Poniższy przykład umożliwia ciągłą integrację/ciągłe wdrażanie w aplikacji, a następnie używa adresu URL elementu webhook w danych wyjściowych do utworzenia elementu webhook w usłudze Azure Container Registry.
ci_cd_url=$(az webapp deployment container config --name <app-name> --resource-group <group-name> --enable-cd true --query CI_CD_URL --output tsv)
az acr webhook create --name <webhook-name> --registry <registry-name> --resource-group <group-name> --actions push --uri $ci_cd_url --scope '<image>:<tag>'
Więcej zasobów
- Azure Container Registry
- Tworzenie aplikacji internetowej platformy .NET Core w usłudze App Service w systemie Linux
- Szybki start: uruchamianie niestandardowego kontenera w usłudze App Service
- App Service on Linux FAQ (Usługa App Service w systemie Linux — FAQ)
- Konfigurowanie kontenerów niestandardowych
- Przepływy pracy akcji do wdrożenia na platformie Azure