Sdílet prostřednictvím


Integrace šablon ARM se službou Azure Pipelines

Šablony Azure Resource Manageru (š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 dva pokročilejší způsoby nasazení šablon pomocí Azure Pipelines.

Vyberte svou 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 šablonu nasadit přímo z úložiště. Tato možnost není popsána v tomto článku, ale místo toho je popsána v kurzu Kontinuální integrace šablon ARM se službou Azure Pipelines. Ukazuje, jak pomocí úlohy nasazení šablony ARM nasadit šablonu z úložiště GitHub.

  • Přidejte úlohu, která spouští skript Azure PowerShellu. Tato možnost má výhodu zajištění konzistence v průběhu ž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 jiné operace, jako je získání hodnot, které se mají použít jako parametry. Tato možnost je uvedená v tomto článku. Viz úloha Azure PowerShellu.

    Visual Studio poskytuje projekt skupiny prostředků Azure, který obsahuje skript PowerShellu. Skript připraví artefakty z projektu do účtu úložiště, ke kterému má Resource Manager 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í pohodlnou alternativu ke skriptu projektu. V kanálu nakonfigurujete dvě úlohy. Jeden úkol 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 nasazování úloh.

Příprava projektu

Tento článek předpokládá, že vaše šablona ARM a organizace Azure DevOps jsou připravené k 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 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. V 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 Gitu Azure Repos.

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

  3. Z tohoto zdroje vyberte úložiště s kódem 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 počáteční kanál.

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

Jste připraveni buď přidat úlohu Azure PowerShellu, nebo zkopírovat soubor a nasadit úlohy.

Úloha Azure PowerShellu

Tato část ukazuje, jak nakonfigurovat průběžné nasazování pomocí jediné úlohy, která spouští skript PowerShellu ve vašem projektu. Pokud potřebujete skript PowerShellu, který nasadí šablonu, přečtěte si téma Deploy-AzTemplate.ps1 nebo Deploy-AzureResourceGroup.ps1.

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

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ž nastavíte úlohu na AzurePowerShell@5, kanál použije modul Az. Pokud ve skriptu používáte modul AzureRM, nastavte úlohu na AzurePowerShell@3hodnotu .

steps:
- task: AzurePowerShell@3

Zadejte azureSubscriptionnázev připojení služby, které jste vytvořili.

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

Zadejte scriptPathrelativní cestu ze souboru kanálu do skriptu. Cestu můžete zobrazit v úložišti.

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

Zadejte ScriptArgumentsvšechny parametry, které váš skript potřebuje. Následující příklad ukazuje některé parametry skriptu, ale budete muset upravit parametry skriptu.

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

Když vyberete Uložit, kanál buildu se automaticky spustí. Vraťte se do souhrnu kanálu buildu a sledujte 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 jednotlivých kroků.

Kopírování a nasazování úloh

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

Aby bylo možné kopírovat soubory do účtu úložiště, musí být instančnímu objektu pro připojení služby přiřazena role Přispěvatel dat objektů blob úložiště nebo Vlastník dat objektů 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í souboru 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 upravit pro vaše prostředí. Označuje SourcePath umístění artefaktů vzhledem k souboru kanálu.

SourcePath: '<path-to-artifacts>'

Zadejte azureSubscriptionná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í fázované šablony.

Následující YAML ukazuje úlohu nasazení šablony Azure Resource Manageru:

- 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ích

  • 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 se vztahuje pouze na 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 nasadit. Úkol vytvoří skupinu prostředků, pokud neexistuje.

    resourceGroupName: '<resource-group-name>'
    location: '<location>'
    
  • csmFileLink: Zadejte odkaz pro fázovanou š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 šablony je zahrnuta, protože tam, kde úloha kopírování souboru zkopírovala soubor do. 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 Možnost Úloha a zobrazte stav úlohy.

Další kroky