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:
- Usługa Container Registry konfiguruje ciągłą integrację/ciągłe wdrażanie między rejestrem kontenerów a App Service.
- Opcja GitHub Actions jest dla Ciebie, jeśli zachowasz kod źródłowy obrazu kontenera w usłudze GitHub. Wyzwolone 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ę 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 z 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ę 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
- Jeśli chcesz użyć tożsamości zarządzanych, aby zablokować dostęp do 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 .
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
- Azure Container Registry
- Tworzenie aplikacji internetowej platformy .NET Core w usłudze App Service w systemie Linux
- Szybki start: uruchamianie niestandardowego kontenera na App Service
- Często zadawane pytania dotyczące usługi App Service w systemie Linux
- Konfigurowanie kontenerów niestandardowych
- Przepływy pracy akcji do wdrożenia na platformie Azure