Udostępnij przez


Ciągłe wdrażanie za pomocą kontenerów niestandardowych w usłudze Azure App Service

W tym artykule wyjaśniono, jak skonfigurować ciągłą integrację i ciągłe dostarczanie (CI/CD) dla niestandardowego obrazu kontenera z zarządzanych repozytoriów usługi Azure Container Registry lub docker Hub.

Przejdź do Centrum wdrażania

W witrynie Azure Portal przejdź do okienka zarządzania dla aplikacji usługi Azure App Service.

W menu paska bocznego w obszarze Wdrożenie wybierz pozycję Centrum wdrażania>Ustawienia.

Wybierz źródło kodu

Z menu rozwijanego Źródło wybierz źródło wdrożenia na podstawie następujących kryteriów:

  • Usługa Container Registry konfiguruje ciągłą integrację/ciągłe wdrażanie między rejestrem kontenerów a usługą App Service.
  • Wybierz opcję GitHub Actions , jeśli zachowasz kod źródłowy obrazu kontenera w usłudze GitHub. Nowe zatwierdzenia w repozytorium GitHub wyzwalają akcję wdrażania, która może być uruchamiana docker build i docker push bezpośrednio w rejestrze kontenerów. Następnie aktualizuje aplikację App Service, aby uruchomić nowy wizerunek. Aby uzyskać więcej informacji, zobacz Jak CI/CD działa z GitHub Actions (Jak działa ciągła integracja/ciągłe wdrażanie z GitHub Actions).
    • Aby skonfigurować CI/CD za pomocą narzędzia Azure Pipelines, zobacz Wdrażanie kontenera aplikacji internetowej na platformie Azure z narzędzia Azure Pipelines.
    • W przypadku aplikacji Docker Compose wybierz pozycję Container Registry.

Jeśli wybierzesz pozycję GitHub Actions, wybierz 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, wybierają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ć.

Konfigurowanie ustawień rejestru

Konfigurowanie ustawień rejestru

Uwaga

Kontenery sidecar zastąpią aplikacje wielokontenerowe (Docker Compose) w usłudze App Service. Aby rozpocząć, zapoznaj się z Samouczek: Konfigurowanie kontenera sidecar dla kontenerów niestandardowych w usłudze Azure App Service.

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 obszarze Źródło rejestru wybierz lokalizację rejestru kontenerów. Jeśli nie jest to usługa Azure Container Registry lub 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 są w usłudze Docker Hub.

Wykonaj następne kroki, wybierając kartę zgodną z wybranym wyborem.

Lista rozwijana Rejestr zawiera rejestry w tej samej subskrypcji co aplikacja. Wybierz odpowiedni rejestr.

Aby wdrożyć z rejestru w innej subskrypcji, zamiast tego wybierz pozycję Rejestr prywatny w źródle rejestru .

Aby użyć tożsamości zarządzanych do blokowania dostępu do usługi Azure Container Registry, zobacz:

Wybierz obraz i tag do wdrożenia. Możesz wpisać polecenie uruchamiania w pliku startowym.

Wybierz następny krok na podstawie wartości Typ kontenera :

  • Docker Compose: wybierz rejestr dla swoich prywatnych obrazów. Wybierz pozycję Wybierz plik , aby przekazać plik Docker Compose, lub po prostu wklej zawartość pliku Docker Compose do pliku Config.
  • Pojedynczy kontener: wybierz wartości obrazu i tagu , które chcesz wdrożyć. Możesz wpisać polecenie uruchamiania w pliku startowym.

Usługa App Service dołącza ciąg z pliku startowego do końca polecenia (jako segment [COMMAND] [ARG...]) gdy rozpoczyna się uruchamianie kontenera.

Włączanie ciągłej integracji/ciągłego wdrażania

Włącz ciągłą integrację/ciągłe wdrażanie

Usługa App Service obsługuje integrację z CI/CD przy użyciu Azure Container Registry i Docker Hub. Aby włączyć integrację CI/CD, wybierz pozycję Włączone w obszarze ciągłe wdrażanie.

Uwaga

Jeśli wybierzesz pozycję GitHub Actions w obszarze Źródło, nie zobaczysz tej opcji, ponieważ CI/CD jest zarządzane bezpośrednio przez GitHub Actions. Zamiast tego zostanie wyświetlona sekcja Konfiguracja przepływu pracy , w której możesz wybrać 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 Jak CI/CD działa z GitHub Actions (Jak działa ciągła integracja/ciągłe wdrażanie z GitHub Actions).

Po włączeniu tej opcji usługa App Service dodaje webhook do repozytorium w Azure Container Registry lub Docker Hub. Repozytorium wysyła powiadomienie do tego webhooka za każdym razem, gdy aktualizujesz wybrany obraz za pomocą docker push. Element webhook powoduje zrestartowanie aplikacji App Service i jej uruchomienie docker pull w celu uzyskania zaktualizowanego obrazu.

Aby upewnić się, że webhook działa prawidłowo, włącz opcję Podstawowe dane uwierzytelniania do publikacji w swojej aplikacji webowej. Jeśli tego nie zrobisz, może zostać wyświetlony błąd "401 brak autoryzacji" dla elementu webhook.

Aby sprawdzić, czy opcja Basic Auth Publishing Credentials jest włączona, przejdź do Konfiguracja>Ustawienia ogólne w aplikacji internetowej. Wyszukaj sekcję Ustawienie platformy , a następnie wybierz opcję Podstawowe poświadczenia publikowania uwierzytelniania .

W przypadku innych rejestrów prywatnych można ręcznie wysłać żądanie do webhooka lub jako krok w przepływie CI/CD. W polu Adres URL elementu webhook wybierz przycisk Kopiuj , aby uzyskać adres URL elementu webhook.

Wybierz pozycję Zapisz, aby zapisać swoje ustawienia.

Uwaga

Obsługa aplikacji wielokontenerowych (Docker Compose) jest ograniczona. W przypadku usługi Azure Container Registry usługa App Service tworzy webhook w wybranym rejestrze z rejestrem jako zakresem. Akcja docker push względem jakiegokolwiek repozytorium w rejestrze (włącznie z tymi, do których nie odnosi się plik Docker Compose), powoduje ponowne uruchomienie aplikacji. Możesz zmodyfikować webhook, aby zawęzić jego zakres. Usługa Docker Hub nie obsługuje elementów webhook na poziomie rejestru. Należy ręcznie dodać webhooks do obrazów zdefiniowanych w pliku Docker Compose.

Jak działa CI/CD przy użyciu GitHub Actions

Jeśli wybierzesz pozycję GitHub Actions z menu rozwijanego Wybierz źródło kodu , 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 Twojego prywatnego rejestru jako tajemnice GitHub. Wygenerowany plik przepływu pracy uruchamia akcję Azure/docker-login logowania do prywatnego rejestru. Uruchamia docker push w celu wdrożenia.
  • Dodaje profil publikowania dla twojej aplikacji jako tajny wpis GitHub. Wygenerowany plik przepływu pracy używa tego sekretu do uwierzytelniania w ramach usługi App Service. Następnie uruchamia Azure/webapps-deploy akcję 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 wyzwolić ponowne uruchomienie aplikacji, przepływ pracy musi zakończyć się akcją Azure/webapps-deploy . Aby uzyskać więcej informacji, zobacz Składnia przepływu pracy dla funkcji GitHub Actions.
  • Jeśli wybrana gałąź jest chroniona, nadal można wyświetlić podgląd pliku przepływu pracy bez zapisywania konfiguracji. Dodaj to oraz wymagane tajne informacje GitHub do repozytorium ręcznie. Ta metoda nie zapewnia integracji dziennika z witryną Azure Portal.
  • Zamiast profilu publikowania, wdrażaj, używając zasadniczej usługi w Microsoft Entra ID.

Uwierzytelnianie za pomocą głównego identyfikatora usługi

Ta opcjonalna konfiguracja zastępuje domyślne uwierzytelnianie profilami publikowania w wygenerowanych plikach przepływu pracy.

Wygeneruj jednostkę usługi przy użyciu az ad sp create-for-rbac polecenia w interfejsie wiersza polecenia platformy Azure. W poniższym przykładzie zastąp <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 GitHubie przejdź do swojego repozytorium, a następnie wybierz pozycję Ustawienia>Sekrety>Dodaj nowy sekret. Wklej całe dane wyjściowe JSON z polecenia Azure CLI do pola wartości sekretu. Nadaj wpisowi tajnym nazwę, taką jak AZURE_CREDENTIALS.

W pliku przepływu pracy wygenerowany przez Centrum wdrażania popraw azure/webapps-deploy krok za pomocą kodu podobnego do następującego przykładu:

- 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

Automatyzacja za pomocą CLI

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 az webapp config container set z parametrem --multicontainer-config-file. Jeśli plik Docker Compose zawiera obrazy prywatne, dodaj parametry --docker-registry-server-*, 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/CD w Twojej aplikacji, a następnie używa adresu URL webhook w danych wyjściowych do utworzenia 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>'