Ciągłe wdrażanie z kontenerami niestandardowymi w Azure App Service

W tym samouczku skonfigurujesz ciągłe wdrażanie niestandardowego obrazu kontenera z zarządzanych repozytoriów Azure Container Registry lub Docker Hub.

1. Przejdź do Centrum wdrażania

W Azure Portal przejdź do strony zarządzania dla aplikacji App Service.

W menu po lewej stronie kliknij pozycjęUstawieniaCentrum> wdrażania.

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

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

Uwaga

W przypadku aplikacji Docker Compose wybierz pozycję Rejestr kontenerów.

Jeśli wybierzesz GitHub Actions, kliknij pozycjęAutoryzuj i postępuj zgodnie z monitami autoryzacji. Jeśli wcześniej autoryzujesz usługę GitHub, możesz wdrożyć z repozytorium innego użytkownika, klikając pozycję Zmień konto.

Po autoryzacji konta platformy Azure za pomocą usługi GitHub wybierz pozycjęOrganizacja, Repozytorium i Gałąź do wdrożenia.

2. Konfigurowanie ustawień rejestru

3. Konfigurowanie ustawień rejestru

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 rejestruwybierz miejsce, w którym znajduje się rejestr kontenerów. Jeśli nie 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 prywatne obrazy 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 Docker Hub nawet jeśli niektóre obrazy nie znajdują się w Docker Hub.

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

Na liście rozwijanej Rejestr są wyświetlane rejestry w tej samej subskrypcji co aplikacja. Wybierz żądany rejestr.

Uwaga

Wybierzobraz 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 obszarze Docker Composewybierz 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 kontenerwybierzobraz i tag do wdrożenia. Jeśli chcesz, wpisz polecenie uruchamiania w pliku startowym.

App Service dołącza ciąg w pliku startowymdocker 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

App Service obsługuje integrację ciągłej integracji/ciągłego wdrażania z Azure Container Registry i Docker Hub. Aby ją włączyć, wybierz pozycjęWłączone w obszarze Ciągłe wdrażanie.

Uwaga

Jeśli wybierzesz GitHub Actions w obszarze Źródło, nie uzyskasz tej opcji, ponieważ ciągła integracja/ciągłe wdrażanie jest obsługiwane bezpośrednio przez 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 Usługi 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 z GitHub Actions).

Po włączeniu tej opcji App Service dodaje element webhook do repozytorium w Azure Container Registry lub Docker Hub. Repozytorium publikuje ten element webhook za każdym razem, gdy wybrany obraz zostanie zaktualizowany przy użyciu polecenia docker push. Element webhook powoduje ponowne uruchomienie aplikacji App Service i uruchomienie docker pull jej w celu pobrania zaktualizowanego obrazu.

W przypadku innych rejestrów prywatnych można ręcznie opublikować element webhook lub jako krok w potoku ciągłej integracji/ciągłego wdrażania. W polu Adres URL elementu webhookkliknij przycisk Kopiuj , aby uzyskać adres URL elementu webhook.

Uwaga

Obsługa aplikacji z wieloma kontenerami (Docker Compose) jest ograniczona:

  • W przypadku Azure Container Registry App Service tworzy element webhook w wybranym rejestrze z rejestrem jako zakresem. Obiekt docker push do dowolnego repozytorium w rejestrze (w tym tych, do których nie odwołuje się plik do platformy Docker Compose), wyzwala ponowne uruchomienie aplikacji. Możesz zmodyfikować element webhook do węższego zakresu.
  • 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 usługą GitHub Actions

Jeśli wybierzesz GitHub Actions w obszarze Źródło (zobacz Wybieranie źródła wdrożenia), App Service skonfigurować ciągłą integrację/ciągłe wdrażanie w następujący sposób:

  • Umieszcza plik przepływu pracy GitHub Actions w repozytorium GitHub w celu obsługi zadań kompilacji i wdrażania w App Service.
  • Dodaje poświadczenia dla rejestru prywatnego jako wpisy tajne usługi GitHub. Wygenerowany plik przepływu pracy uruchamia akcję Azure/docker-login , aby zalogować się przy użyciu rejestru prywatnego, a następnie uruchamia docker push polecenie w celu wdrożenia.
  • Dodaje profil publikowania dla aplikacji jako wpis tajny usługi GitHub. Wygenerowany plik przepływu pracy używa tego wpisu tajnego do uwierzytelniania za pomocą 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.

Dostawcę kompilacji GitHub Actions można dostosować 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 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 Azure Portal.
  • Zamiast profilu publikowania należy wdrożyć przy użyciu jednostki usługi w usłudze Azure Active Directory.

Uwierzytelnianie przy użyciu 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 ciąg <subscription-id>, <group-name i app-name>>własnymi wartościami.< Zapisz całe dane wyjściowe JSON dla następnego 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> \
                            --sdk-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 App Service, a nie całej grupy zasobów.

W usłudze GitHubprzejdź 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żaniapoprawazure/webapps-deploy krok z kodem, tak 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 plik docker Compose lokalnie, a następnie uruchompolecenie az webapp config container set with the parametr .--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 włącza ciągłą integrację/ciągłe wdrażanie w aplikacji, a następnie używa adresu URL elementu webhook w danych wyjściowych, aby utworzyć element webhook w 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