Delen via


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 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.

  1. Navigeer naar Pijplijnen in de linkermenubalk en klik op de knop Pijplijn maken
  2. Selecteer In het volgende scherm Azure Repos Git als uw opslagplaatsoptie en selecteert u de opslagplaats waarin uw code zich bevindt
  3. Kies op het tabblad Configureren de optie Starter-pijplijn
  4. 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'