Integrace šablon ARM se službou Azure Pipelines

Šablony Azure Resource Manager (šablony ARM) můžete integrovat se službou Azure Pipelines pro kontinuální integraci a průběžné nasazování (CI/CD). V tomto článku se dozvíte o dvou pokročilejších způsobech nasazení šablon pomocí Azure Pipelines.

Vyberte požadovanou možnost.

Než budete pokračovat v tomto článku, podívejme se na různé možnosti nasazení šablony ARM z kanálu.

  • Použijte úlohu nasazení šablony ARM. Tato možnost je nejjednodušší. Tento přístup funguje, když chcete nasadit šablonu přímo z úložiště. Tato možnost není v tomto článku popsána, ale místo toho je popsána v kurzu Kontinuální integrace šablon ARM s Azure Pipelines. Ukazuje, jak použít úlohu nasazení šablony ARM k nasazení šablony z úložiště GitHub.

  • Přidejte úlohu, která spouští skript Azure PowerShell. Tato možnost má výhodu v tom, že zajišťuje konzistenci v průběhu celého životního cyklu vývoje, protože můžete použít stejný skript, který jste použili při spouštění místních testů. Skript nasadí šablonu, ale může také provádět další operace, jako je získání hodnot, které se mají použít jako parametry. Tato možnost je uvedená v tomto článku. Viz Azure PowerShell úkol.

    Visual Studio poskytuje projekt skupiny prostředků Azure , který obsahuje skript PowerShellu. Skript rozfázuje artefakty z vašeho projektu do účtu úložiště, ke kterému Resource Manager mít přístup. Artefakty jsou položky v projektu, jako jsou propojené šablony, skripty a binární soubory aplikací. Pokud chcete pokračovat v používání skriptu z projektu, použijte úlohu skriptu PowerShellu uvedenou v tomto článku.

  • Přidejte úkoly pro kopírování a nasazení úkolů. Tato možnost nabízí praktickou alternativu ke skriptu projektu. V kanálu nakonfigurujete dvě úlohy. Jedna úloha připraví artefakty do přístupného umístění. Druhá úloha nasadí šablonu z daného umístění. Tato možnost je uvedená v tomto článku. Viz Kopírování a nasazení úloh.

Příprava projektu

Tento článek předpokládá, že vaše šablona ARM a organizace Azure DevOps jsou připravené na vytvoření kanálu. Následující kroky ukazují, jak se ujistit, že jste připravení:

  • Máte organizaci Azure DevOps. Pokud ho nemáte, vytvořte si ho zdarma. Pokud už váš tým má organizaci Azure DevOps, ujistěte se, že jste správcem projektu Azure DevOps, který chcete použít.

  • Nakonfigurovali jste připojení služby k vašemu předplatnému Azure. Úlohy v kanálu se spouštějí pod identitou instančního objektu. Postup vytvoření připojení najdete v tématu Vytvoření projektu DevOps.

  • Máte šablonu ARM , která definuje infrastrukturu pro váš projekt.

Vytvoření kanálu

  1. Pokud jste kanál ještě nepřidali, musíte vytvořit nový kanál. Ve vaší organizaci Azure DevOps vyberte Kanály a Nový kanál.

    Snímek obrazovky s tlačítkem Přidat nový kanál

  2. Určete, kde je váš kód uložený. Následující obrázek znázorňuje výběr Azure Repos Gitu.

    Snímek obrazovky s výběrem zdroje kódu v Azure DevOps

  3. Z tohoto zdroje vyberte úložiště, které obsahuje kód pro váš projekt.

    Snímek obrazovky s výběrem úložiště pro projekt v Azure DevOps

  4. Vyberte typ kanálu, který chcete vytvořit. Můžete vybrat úvodní kanál.

    Snímek obrazovky s výběrem typu kanálu, který se má vytvořit v Azure DevOps

Jste připraveni přidat Azure PowerShell úlohu nebo zkopírovat soubor a nasadit úlohy.

Úloha Azure PowerShellu

V této části se dozvíte, jak nakonfigurovat průběžné nasazování pomocí jediné úlohy, která ve vašem projektu spustí skript PowerShellu. Pokud potřebujete skript PowerShellu, který nasadí šablonu, přečtěte si témaDeploy-AzTemplate.ps1 nebo Deploy-AzureResourceGroup.ps1.

Následující soubor YAML vytvoří Azure PowerShell úlohu:

trigger:
- master

pool:
  vmImage: 'ubuntu-latest'

steps:
- task: AzurePowerShell@5
  inputs:
    azureSubscription: 'script-connection'
    ScriptType: 'FilePath'
    ScriptPath: './Deploy-AzTemplate.ps1'
    ScriptArguments: -Location 'centralus' -ResourceGroupName 'demogroup' -TemplateFile templates\mainTemplate.json
    azurePowerShellVersion: 'LatestVersion'

Když úlohu nastavíte na AzurePowerShell@5, kanál použije modul Az. Pokud ve skriptu používáte modul AzureRM, nastavte úlohu na AzurePowerShell@3.

steps:
- task: AzurePowerShell@3

V poli azureSubscriptionzadejte název připojení služby, které jste vytvořili.

inputs:
    azureSubscription: '<your-connection-name>'

V případě scriptPathzadejte relativní cestu ze souboru kanálu ke skriptu. Cestu si můžete prohlédnout v úložišti.

ScriptPath: '<your-relative-path>/<script-file-name>.ps1'

V ScriptArgumentssouboru zadejte všechny parametry, které váš skript potřebuje. Následující příklad ukazuje některé parametry skriptu, ale budete je muset přizpůsobit.

ScriptArguments: -Location 'centralus' -ResourceGroupName 'demogroup' -TemplateFile templates\mainTemplate.json

Když vyberete Uložit, kanál buildu se automaticky spustí. Zpět na souhrn kanálu buildu a watch stav.

Snímek obrazovky se zobrazením výsledků kanálu v Azure DevOps

Výběrem aktuálně spuštěného kanálu zobrazíte podrobnosti o úlohách. Po dokončení se zobrazí výsledky pro každý krok.

Kopírování a nasazení úloh

Tato část ukazuje, jak nakonfigurovat průběžné nasazování pomocí dvou úloh. První úloha připraví artefakty do účtu úložiště a druhá nasadí šablonu.

Pokud chcete kopírovat soubory do účtu úložiště, musí mít instanční objekt pro připojení služby přiřazenou roli Přispěvatel dat v objektech blob služby Storage nebo Vlastník dat v objektech blob služby Storage. Další informace najdete v tématu Začínáme s nástrojem AzCopy.

Následující YAML ukazuje úlohu kopírování souborů Azure.

trigger:
- master

pool:
  vmImage: 'windows-latest'

steps:
- task: AzureFileCopy@4
  inputs:
    SourcePath: 'templates'
    azureSubscription: 'copy-connection'
    Destination: 'AzureBlob'
    storage: 'demostorage'
    ContainerName: 'projecttemplates'
  name: AzureFileCopy

Existuje několik částí této úlohy, které je potřeba pro vaše prostředí upravit. Označuje SourcePath umístění artefaktů vzhledem k souboru kanálu.

SourcePath: '<path-to-artifacts>'

V poli azureSubscriptionzadejte název připojení služby, které jste vytvořili.

azureSubscription: '<your-connection-name>'

Jako název úložiště a kontejneru zadejte názvy účtu úložiště a kontejneru, který chcete použít k ukládání artefaktů. Účet úložiště musí existovat.

storage: '<your-storage-account-name>'
ContainerName: '<container-name>'

Po vytvoření úlohy kopírování souboru jste připraveni přidat úlohu pro nasazení připravené šablony.

Následující yaml ukazuje úlohu nasazení šablony Azure Resource Manager:

- task: AzureResourceManagerTemplateDeployment@3
  inputs:
    deploymentScope: 'Resource Group'
    azureResourceManagerConnection: 'copy-connection'
    subscriptionId: '00000000-0000-0000-0000-000000000000'
    action: 'Create Or Update Resource Group'
    resourceGroupName: 'demogroup'
    location: 'West US'
    templateLocation: 'URL of the file'
    csmFileLink: '$(AzureFileCopy.StorageContainerUri)templates/mainTemplate.json$(AzureFileCopy.StorageContainerSasToken)'
    csmParametersFileLink: '$(AzureFileCopy.StorageContainerUri)templates/mainTemplate.parameters.json$(AzureFileCopy.StorageContainerSasToken)'
    deploymentMode: 'Incremental'
    deploymentName: 'deploy1'

Existuje několik částí této úlohy, které je potřeba podrobněji zkontrolovat.

  • deploymentScope: Vyberte rozsah nasazení z možností: Management Group, Subscriptiona Resource Group. Další informace o oborech najdete v tématu Rozsahy nasazení.

  • azureResourceManagerConnection: Zadejte název připojení služby, které jste vytvořili.

  • subscriptionId: Zadejte ID cílového předplatného. Tato vlastnost platí jenom pro obor nasazení skupiny prostředků a obor nasazení předplatného.

  • resourceGroupName a location: zadejte název a umístění skupiny prostředků, do které chcete provést nasazení. Úloha vytvoří skupinu prostředků, pokud neexistuje.

    resourceGroupName: '<resource-group-name>'
    location: '<location>'
    
  • csmFileLink: Zadejte odkaz na připravenou šablonu. Při nastavování hodnoty použijte proměnné vrácené z úlohy kopírování souboru. Následující příklad odkazuje na šablonu s názvem mainTemplate.json. Složka s názvem templates je zahrnuta, protože tam, kam úloha kopírování souboru soubor zkopírovala. V kanálu zadejte cestu k šabloně a název šablony.

    csmFileLink: '$(AzureFileCopy.StorageContainerUri)templates/mainTemplate.json$(AzureFileCopy.StorageContainerSasToken)'
    

Váš kanál vypadá takto:

trigger:
- master

pool:
  vmImage: 'windows-latest'

steps:
- task: AzureFileCopy@4
  inputs:
    SourcePath: 'templates'
    azureSubscription: 'copy-connection'
    Destination: 'AzureBlob'
    storage: 'demostorage'
    ContainerName: 'projecttemplates'
  name: AzureFileCopy
- task: AzureResourceManagerTemplateDeployment@3
  inputs:
    deploymentScope: 'Resource Group'
    azureResourceManagerConnection: 'copy-connection'
    subscriptionId: '00000000-0000-0000-0000-000000000000'
    action: 'Create Or Update Resource Group'
    resourceGroupName: 'demogroup'
    location: 'West US'
    templateLocation: 'URL of the file'
    csmFileLink: '$(AzureFileCopy.StorageContainerUri)templates/mainTemplate.json$(AzureFileCopy.StorageContainerSasToken)'
    csmParametersFileLink: '$(AzureFileCopy.StorageContainerUri)templates/mainTemplate.parameters.json$(AzureFileCopy.StorageContainerSasToken)'
    deploymentMode: 'Incremental'
    deploymentName: 'deploy1'

Když vyberete Uložit, kanál buildu se automaticky spustí. V rámci Úlohy vyberte Úloha a zobrazte stav úlohy.

Další kroky