Een aangepaste container implementeren in App Service met behulp van Azure Pipelines
Met Azure DevOps kunt u uw code hosten, bouwen, plannen en testen met gratis werkstromen. Met Behulp van Azure Pipelines als een van deze werkstromen kunt u uw toepassing implementeren met CI/CD die werkt met elk platform en elke cloud. Een pijplijn wordt gedefinieerd als een YAML-bestand in de hoofdmap van uw opslagplaats.
In dit artikel gebruiken we Azure Pipelines om een Windows-containertoepassing te implementeren in App Service vanuit een Git-opslagplaats in Azure DevOps. Hierbij wordt ervan uitgegaan dat u al een .NET-toepassing hebt met een ondersteunend dockerfile in Azure DevOps.
Vereisten
- Een Azure-account met een actief abonnement. Gratis een account maken
- een Azure DevOps-organisatie. Maak gratis een account.
- Een werkende Windows-app met Dockerfile die wordt gehost op Azure-opslagplaatsen.
Een serviceverbinding toevoegen
Voordat u uw pijplijn maakt, moet u eerst uw serviceverbinding maken, omdat u wordt gevraagd uw verbinding te kiezen en te verifiëren bij het maken van uw sjabloon. Met een serviceverbinding kunt u verbinding maken met uw keuzeregister (ACR of Docker Hub) wanneer u de taaksjablonen gebruikt. Wanneer u een nieuwe serviceverbinding toevoegt, kiest u de optie Docker Registry. In het volgende formulier wordt u gevraagd Docker Hub of Azure Container Registry te kiezen, samen met informatie die betrekking heeft. Als u deze zelfstudie wilt volgen, gebruikt u Azure Container Registry. U kunt hier een nieuwe serviceverbinding maken volgens de instructies.
Uw geheimen beveiligen
Omdat we gevoelige informatie gebruiken die u niet wilt dat anderen toegang hebben, gebruiken we variabelen om onze gegevens te beveiligen. Maak een variabele door de instructies hier te volgen.
Als u een variabele wilt toevoegen, klikt u op de knop Variabelen naast de knop Opslaan in de rechterbovenhoek van de bewerkingsweergave voor uw pijplijn. Selecteer de knop Nieuwe variabele en voer uw gegevens in. Voeg de onderstaande variabelen toe met uw eigen geheimen die geschikt zijn voor elke resource.
- vmImageName: 'windows-latest'
- imageRepository: 'your-image-repo-name'
- dockerfilePath: '$(Build.SourcesDirectory)/path/to/Dockerfile'
- dockerRegistryServiceConnection: 'your-service-connection-number'
Een nieuwe pipeline maken
Zodra uw opslagplaats is gemaakt met uw .NET-toepassing en ondersteuning voor dockerfile, kunt u de pijplijn maken door deze stappen te volgen.
- Navigeer naar Pijplijnen in de linkermenubalk en klik op de knop Pijplijn maken
- Selecteer In het volgende scherm Azure Repos Git als uw opslagplaatsoptie en selecteert u de opslagplaats waarin uw code zich bevindt
- Kies op het tabblad Configureren de optie Starter-pijplijn
- Klik op het volgende tabblad Controleren op de knop Opslaan
Installatiekopieën bouwen en pushen naar Azure Container Registry
Nadat uw pijplijn is gemaakt en opgeslagen, moet u de pijplijn bewerken om de stappen uit te voeren voor het bouwen van de container, het pushen naar een register en het implementeren van de installatiekopieën in App Service. Als u wilt beginnen, gaat u naar het menu Pijplijnen , kiest u de pijplijn die u hebt gemaakt en klikt u op de knop Bewerken .
Eerst moet u de Docker-taak toevoegen, zodat u de installatiekopieën kunt bouwen. Voeg de volgende code toe en vervang de Dockerfile: app/Dockerfile door het pad naar uw 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)
De App Service-implementatietaak toevoegen
Vervolgens moet u de implementatietaak instellen. Hiervoor is uw abonnementsnaam, toepassingsnaam en containerregister vereist. Voeg een nieuwe fase toe aan het yaml-bestand door de onderstaande code te plakken.
- stage: Deploy
displayName: Deploy to App Service
jobs:
- job: Deploy
displayName: Deploy
pool:
vmImage: $(vmImageName)
steps:
Navigeer vervolgens naar het tabblad Assistent weergeven in de rechterbovenhoek en zoek de Azure-app Service-implementatietaak en vul het volgende formulier in:
- Verbindingstype: Azure Resource Manager
- Azure-abonnement: naam van uw abonnement
- App Service-type: Web App for Containers (Windows)
- App Service-naam: uw-app-naam
- Register of naamruimte: uw-azure-container-registry-naamruimte
- Installatiekopieën: uw-azure-container-registry-image-name
Zodra u deze hebt ingevuld, klikt u op de knop Toevoegen om de onderstaande taak toe te voegen:
- task: AzureRmWebAppDeployment@4
inputs:
ConnectionType: 'AzureRM'
azureSubscription: 'my-subscription-name'
appType: 'webAppHyperVContainer'
WebAppName: 'my-app-name'
DockerNamespace: 'myregsitry.azurecr.io'
DockerRepository: 'dotnetframework:12'
Nadat u de taak hebt toegevoegd, is de pijplijn klaar om te worden uitgevoerd. Klik op de knop Valideren en opslaan en voer de pijplijn uit. De pijplijn doorloopt de stappen voor het bouwen en pushen van de Windows-containerinstallatiekopieën naar Azure Container Registry en implementeert de installatiekopieën in App Service.
Hieronder ziet u het voorbeeld van het volledige yaml-bestand:
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'