Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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řte si bezplatný účet.
- 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.
- Na panelu nabídky vlevo přejděte na Řeky a stiskněte tlačítko Vytvořit řeku .
- 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 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.
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: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
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'