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ę Centrum> wdrażania Ustawienia.

2. Wybierz źródło wdrożenia

Wybierz źródło wdrożenia zależy od danego scenariusza:

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

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 wybierzobraz 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 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 ogólnego Ustawienia 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 kliknijprzycisk 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 przyciskZapisz.

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 zrewidujazure/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 polecenieaz 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 polecenieaz 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 polecenieaz 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