Sdílet prostřednictvím


Nasazení vlastního kontejneru do služby App Service pomocí Azure Pipelines

Azure DevOps umožňuje hostovat, sestavovat, plánovat a testovat kód pomocí bezplatných pracovních postupů. Použití Azure Pipelines jako jednoho z těchto pracovních postupů umožňuje nasadit aplikaci pomocí CI/CD, která funguje s libovolnou platformou a cloudem. Kanál se definuje jako soubor YAML v kořenovém adresáři vašeho úložiště.

V tomto článku použijeme Azure Pipelines k nasazení aplikace typu kontejner pro Windows do služby App Service z úložiště Git v Azure DevOps. Předpokládá se, že už máte aplikaci .NET s podpůrným souborem Dockerfile v Azure DevOps.

Požadavky

Přidání připojení služby

Před vytvořením kanálu byste měli nejprve vytvořit připojení ke službě, protože při vytváření šablony se zobrazí výzva k výběru a ověření připojení. Připojení ke službě umožňuje připojit se k libovolnému registru (ACR nebo Docker Hub) při použití šablon úloh. Při přidávání nového připojení služby zvolte možnost Registr Dockeru. Následující formulář vás požádá o výběr Centra Dockeru nebo služby Azure Container Registry spolu s souvisejícími informacemi. Pokud chcete postupovat podle tohoto kurzu, použijte Azure Container Registry. Nové připojení ke službě můžete vytvořit podle pokynů zde.

Zabezpečení tajných kódů

Vzhledem k tomu, že používáme citlivé informace, ke kterým nechcete, aby ostatní měli přístup, používáme proměnné k ochraně našich informací. Vytvořte proměnnou podle zde uvedených pokynů.

  1. Pokud chcete přidat proměnnou, klikněte na tlačítko Proměnné vedle tlačítka Uložit v pravém horním rohu zobrazení pro úpravy kanálu.

  2. Vyberte tlačítko Nová proměnná a zadejte své informace. Přidejte níže uvedené proměnné s vlastními tajnými kódy odpovídajícími jednotlivým prostředkům.

    • vmImageName: windows-latest
    • imageRepository: your-image-repo-name
    • dockerfilePath: $(Build.SourcesDirectory)/path/to/Dockerfile
    • dockerRegistryServiceConnection: your-service-connection-number

Vytvoření nového kanálu

Po vytvoření úložiště pomocí aplikace .NET a podpůrného souboru Dockerfile můžete kanál vytvořit pomocí následujícího postupu.

  1. Na panelu nabídky vlevo přejděte na Řeky a stiskněte tlačítko Vytvořit řeku .
  2. Na další obrazovce jako možnost úložiště vyberte Git Azure Repos a vyberte úložiště, ve kterém je váš kód.
  3. Na kartě Konfigurace zvolte možnost Počáteční kanál .
  4. Pod další kartou Revize klikněte na tlačítko Uložit .

Sestavení a nasdílení image do služby Azure Container Registry

Po vytvoření a uložení kanálu budete muset kanál upravit a spustit kroky pro sestavení kontejneru, nasdílení do registru a nasazení image do služby App Service. Začněte tak, že přejdete do nabídky Pipelines , zvolíte kanál, který jste vytvořili, a kliknete na tlačítko Upravit .

Nejprve musíte přidat úlohu Dockeru, abyste mohli vytvořit image. Přidejte následující kód a nahraďte soubor Dockerfile: app/Dockerfile cestou k souboru 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)

Přidání úlohy nasazení služby App Service

Dále je potřeba nastavit úlohu nasazení. To vyžaduje název předplatného, název aplikace a registr kontejneru.

  1. Do souboru yaml přidejte novou fázi vložením následujícího kódu.

    - stage: Deploy
      displayName: Deploy to App Service
      jobs:
      - job: Deploy
        displayName: Deploy
        pool:
          vmImage: $(vmImageName)
        steps:
    
  2. V pravém horním rohu přejděte na kartu Zobrazit asistenta a najděte úlohu nasazení služby Azure App Service a vyplňte následující formulář:

    • Typ připojení: Azure Resource Manager
    • Předplatné Azure: název vašeho předplatného
    • Typ služby App Service: Web App for Containers (Windows)
    • Název služby App Service: název vaší aplikace
    • Registr nebo obor názvů: your-azure-container-registry-namespace
    • Obrázek: název vaší image-azure-container-registry-image-name
  3. Kliknutím na tlačítko Přidat přidejte následující úkol:

    - task: AzureRmWebAppDeployment@4
      inputs:
        ConnectionType: 'AzureRM'
        azureSubscription: 'my-subscription-name'
        appType: 'webAppHyperVContainer'
        WebAppName: 'my-app-name'
        DockerNamespace: 'myregsitry.azurecr.io'
        DockerRepository: 'dotnetframework:12'
    

Po přidání úlohy je kanál připravený ke spuštění. Klikněte na tlačítko Ověřit a uložit a spusťte kanál. Kanál prochází kroky pro sestavení a nasdílení image kontejneru Windows do služby Azure Container Registry a nasazení image do služby App Service.

Níže je příklad úplného souboru 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'