Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Usługa Azure DevOps umożliwia hostowanie, kompilowanie, planowanie i testowanie kodu przy użyciu bezpłatnych przepływów pracy. Użycie usługi Azure Pipelines jako jednego z tych przepływów pracy umożliwia wdrożenie aplikacji przy użyciu ciągłej integracji/ciągłego wdrażania, która współpracuje z dowolną platformą i chmurą. Potok jest definiowany jako plik YAML w katalogu głównym repozytorium.
W tym artykule użyjemy usługi Azure Pipelines do wdrożenia aplikacji kontenera systemu Windows w usłudze App Service z repozytorium Git w usłudze Azure DevOps. Przyjęto założenie, że masz już aplikację .NET z obsługą pliku dockerfile w usłudze Azure DevOps.
Wymagania wstępne
- Konto platformy Azure z aktywną subskrypcją. Utwórz konto bezpłatnie.
- Organizacja: Azure DevOps. Utwórz je bezpłatnie.
- Działająca aplikacja systemu Windows z plikiem Dockerfile hostowanym w usłudze Azure Repos.
Dodawanie połączenia z usługą
Przed utworzeniem potoku należy najpierw utworzyć połączenie z usługą, ponieważ zostanie wyświetlony monit o wybranie i zweryfikowanie połączenia podczas tworzenia szablonu. Połączenie z usługą umożliwia nawiązywanie połączenia z wybranym rejestrem (ACR lub Docker Hub) podczas korzystania z szablonów zadań. Podczas dodawania nowego połączenia z usługą wybierz opcję Rejestr platformy Docker. Poniższy formularz zawiera prośbę o wybranie usługi Docker Hub lub Azure Container Registry wraz z informacjami dotyczącymi. Aby wykonać czynności opisane w tym samouczku, użyj usługi Azure Container Registry. Nowe połączenie z usługą można utworzyć zgodnie z instrukcjami podanymi tutaj.
Zabezpieczanie wpisów tajnych
Ponieważ używamy poufnych informacji, do których nie chcesz uzyskiwać dostępu innym osobom, używamy zmiennych do ochrony naszych informacji. Utwórz zmienną, postępując zgodnie z instrukcjami podanymi tutaj.
Aby dodać zmienną, kliknij przycisk Zmienne obok przycisku Zapisz w prawym górnym rogu widoku edycji potoku. Wybierz przycisk Nowa zmienna i wprowadź informacje. Dodaj poniższe zmienne przy użyciu własnych wpisów tajnych odpowiednich dla każdego zasobu.
- vmImageName: "windows-latest"
- imageRepository: "your-image-repo-name"
- dockerfilePath: "$(Build.SourcesDirectory)/path/to/Dockerfile"
- dockerRegistryServiceConnection: "your-service-connection-number"
Tworzenie nowego potoku
Po utworzeniu repozytorium za pomocą aplikacji .NET i pomocniczego pliku dockerfile możesz utworzyć potok, wykonując następujące kroki.
- Przejdź do pozycji Potoki na pasku menu po lewej stronie i kliknij przycisk Utwórz potok
- Na następnym ekranie wybierz pozycję Azure Repos Git jako opcję repozytorium i wybierz repozytorium, w którym znajduje się kod
- Na karcie Konfigurowanie wybierz opcję Potok początkowy
- Na następnej karcie Przegląd kliknij przycisk Zapisz
Kompilowanie i wypychanie obrazu do usługi Azure Container Registry
Po utworzeniu i zapisaniu potoku należy edytować potok, aby uruchomić kroki tworzenia kontenera, wypychania do rejestru i wdrażania obrazu w usłudze App Service. Aby rozpocząć, przejdź do menu Potoki , wybierz utworzony potok i kliknij przycisk Edytuj .
Najpierw należy dodać zadanie platformy Docker, aby można było skompilować obraz. Dodaj następujący kod i zastąp plik Dockerfile: app/Dockerfile ścieżką do pliku Dockerfile.
trigger:
- main
pool:
vmImage: 'windows-latest'
variables:
vmImageName: 'windows-latest'
imageRepository: 'your-image-repo-name'
dockerfilePath: '$(Build.SourcesDirectory)/path/to/Dockerfile'
dockerRegistryServiceConnection: 'your-service-connection-number'
- stage: Build
displayName: Build and push stage
jobs:
- job: Build
displayName: Build job
pool:
vmImage: $(vmImageName)
steps:
- task: Docker@2
displayName: Build and push an image to container registry
inputs:
command: buildAndPush
repository: $(imageRepository)
dockerfile: $(dockerfilePath)
containerRegistry: $(dockerRegistryServiceConnection)
tags: |
$(tag)
Dodawanie zadania wdrażania usługi App Service
Następnie należy skonfigurować zadanie wdrażania. Wymaga to nazwy subskrypcji, nazwy aplikacji i rejestru kontenerów. Dodaj nowy etap do pliku yaml, wklejając poniższy kod.
- stage: Deploy
displayName: Deploy to App Service
jobs:
- job: Deploy
displayName: Deploy
pool:
vmImage: $(vmImageName)
steps:
Następnie przejdź do karty Pokaż asystenta w prawym górnym rogu i znajdź zadanie wdrażania usługi aplikacja systemu Azure i wypełnij następujący formularz:
- Typ połączenia: Azure Resource Manager
- Subskrypcja platformy Azure: twoja-subskrypcja-nazwa
- Typ usługi App Service: Web App for Containers (Windows)
- Nazwa usługi App Service: twoja-nazwa aplikacji
- Rejestr lub przestrzeń nazw: twoja-azure-container-registry-namespace
- Obraz: your-azure-container-registry-image-name
Po wypełnieniu tych elementów kliknij przycisk Dodaj , aby dodać poniższe zadanie:
- task: AzureRmWebAppDeployment@4
inputs:
ConnectionType: 'AzureRM'
azureSubscription: 'my-subscription-name'
appType: 'webAppHyperVContainer'
WebAppName: 'my-app-name'
DockerNamespace: 'myregsitry.azurecr.io'
DockerRepository: 'dotnetframework:12'
Po dodaniu zadania potok jest gotowy do uruchomienia. Kliknij przycisk Weryfikuj i zapisz, a następnie uruchom potok. Potok przechodzi przez kroki kompilowania i wypychania obrazu kontenera systemu Windows do usługi Azure Container Registry i wdrażania obrazu w usłudze App Service.
Poniżej przedstawiono przykład pełnego pliku yaml:
trigger:
- main
pool:
vmImage: 'windows-latest'
variables:
vmImageName: 'windows-latest'
imageRepository: 'your-image-repo-name'
dockerfilePath: '$(Build.SourcesDirectory)/path/to/Dockerfile'
dockerRegistryServiceConnection: 'your-service-connection-number'
- stage: Build
displayName: Build and push stage
jobs:
- job: Build
displayName: Build job
pool:
vmImage: $(vmImageName)
steps:
- task: Docker@2
displayName: Build and push an image to container registry
inputs:
command: buildAndPush
repository: $(imageRepository)
dockerfile: $(dockerfilePath)
containerRegistry: $(dockerRegistryServiceConnection)
tags: |
$(tag)
- stage: Deploy
displayName: Deploy to App Service
jobs:
- job: Deploy
displayName: Deploy
pool:
vmImage: $(vmImageName)
steps:
- task: AzureRmWebAppDeployment@4
inputs:
ConnectionType: 'AzureRM'
azureSubscription: 'my-subscription-name'
appType: 'webAppHyperVContainer'
WebAppName: 'my-app-name'
DockerNamespace: 'myregsitry.azurecr.io'
DockerRepository: 'dotnetframework:12'