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
- Účet Azure s aktivním předplatným. Vytvoření účtu zdarma
- Organizace Azure DevOps. Vytvořte si ho zdarma.
- Funkční aplikace pro Windows se souborem Dockerfile hostovaným v Azure Repos
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ů.
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. 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.
- Přejděte na Kanály na levém řádku nabídek a klikněte na tlačítko Vytvořit kanál .
- 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.
- Na kartě Konfigurace zvolte možnost Počáteční kanál .
- Pod další kartou Revize klikněte na tlačítko Uložit .
Sestavení a nasdílení image do registru kontejnerů Azure
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. 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:
Dále přejděte na kartu Zobrazit asistenta v pravém horním rohu a vyhledejte úlohu nasazení služby Aplikace Azure 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
Jakmile je vyplníte, klikněte na tlačítko Přidat a 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'