Integrowanie szablonów usługi ARM z usługą Azure Pipelines

Szablony usługi Azure Resource Manager (szablony usługi ARM) można zintegrować z usługą Azure Pipelines w celu ciągłej integracji i ciągłego wdrażania (CI/CD). W tym artykule przedstawiono dwa bardziej zaawansowane sposoby wdrażania szablonów za pomocą usługi Azure Pipelines.

Wybierz opcję

Przed kontynuowaniem pracy z tym artykułem rozważmy różne opcje wdrażania szablonu usługi ARM z potoku.

  • Użyj zadania wdrażania szablonu usługi ARM. Ta opcja jest najłatwiejsza. Takie podejście działa, gdy chcesz wdrożyć szablon bezpośrednio z repozytorium. Ta opcja nie jest omówiona w tym artykule, ale zamiast tego opisano w samouczku Ciągła integracja szablonów usługi ARM z usługą Azure Pipelines. Pokazano w nim, jak za pomocą zadania wdrażania szablonu usługi ARM wdrożyć szablon z repozytorium GitHub.

  • Dodaj zadanie uruchamiające skrypt programu Azure PowerShell. Ta opcja ma zaletę zapewniania spójności w całym cyklu życia programowania, ponieważ można użyć tego samego skryptu, który został użyty podczas uruchamiania testów lokalnych. Skrypt wdraża szablon, ale może również wykonywać inne operacje, takie jak pobieranie wartości do użycia jako parametry. Ta opcja jest wyświetlana w tym artykule. Zobacz Zadanie programu Azure PowerShell.

    Program Visual Studio udostępnia projekt grupy zasobów platformy Azure , który zawiera skrypt programu PowerShell. Skrypt etapuje artefakty z projektu na konto magazynu, do którego usługa Resource Manager może uzyskiwać dostęp. Artefakty to elementy w projekcie, takie jak połączone szablony, skrypty i pliki binarne aplikacji. Jeśli chcesz kontynuować korzystanie ze skryptu z projektu, użyj zadania skryptu programu PowerShell pokazanego w tym artykule.

  • Dodaj zadania do kopiowania i wdrażania zadań. Ta opcja oferuje wygodną alternatywę dla skryptu projektu. W potoku można skonfigurować dwa zadania. Jedno zadanie etapuje artefakty w dostępnej lokalizacji. Drugie zadanie wdraża szablon z tej lokalizacji. Ta opcja jest wyświetlana w tym artykule. Zobacz Kopiowanie i wdrażanie zadań.

Przygotowywanie projektu

W tym artykule założono, że szablon usługi ARM i organizacja usługi Azure DevOps są gotowe do utworzenia potoku. W poniższych krokach pokazano, jak upewnić się, że wszystko jest gotowe:

  • Masz organizację usługi Azure DevOps. Jeśli go nie masz, utwórz go bezpłatnie. Jeśli Twój zespół ma już organizację usługi Azure DevOps, upewnij się, że jesteś administratorem projektu usługi Azure DevOps, którego chcesz użyć.

  • Skonfigurowano połączenie usługi z subskrypcją platformy Azure. Zadania w potoku są wykonywane w ramach tożsamości jednostki usługi. Aby uzyskać instrukcje tworzenia połączenia, zobacz Tworzenie projektu DevOps.

  • Masz szablon usługi ARM , który definiuje infrastrukturę projektu.

Tworzenie potoku

  1. Jeśli wcześniej nie dodano potoku, musisz utworzyć nowy potok. W organizacji usługi Azure DevOps wybierz pozycję Potoki i Nowy potok.

    Add new pipeline

  2. Określ miejsce przechowywania kodu. Na poniższej ilustracji przedstawiono wybieranie usługi Azure Repos Git.

    Select code source

  3. W tym źródle wybierz repozytorium zawierające kod projektu.

    Select repository

  4. Wybierz typ potoku do utworzenia. Możesz wybrać pozycję Potok startowy.

    Select pipeline

Możesz dodać zadanie programu Azure PowerShell lub skopiować plik i wdrożyć zadania.

Zadanie programu Azure PowerShell

W tej sekcji pokazano, jak skonfigurować ciągłe wdrażanie przy użyciu jednego zadania, które uruchamia skrypt programu PowerShell w projekcie. Jeśli potrzebujesz skryptu programu PowerShell, który wdraża szablon, zobacz Deploy-AzTemplate.ps1 lub Deploy-AzureResourceGroup.ps1.

Poniższy plik YAML tworzy zadanie programu Azure PowerShell:

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'

Po ustawieniu zadania na AzurePowerShell@5wartość potok używa modułu Az. Jeśli używasz modułu AzureRM w skryscie, ustaw zadanie na AzurePowerShell@3wartość .

steps:
- task: AzurePowerShell@3

W polu azureSubscriptionpodaj nazwę utworzonego połączenia z usługą.

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

W polu scriptPathpodaj ścieżkę względną z pliku potoku do skryptu. Możesz wyszukać w repozytorium, aby zobaczyć ścieżkę.

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

W ScriptArgumentspliku podaj wszystkie parametry wymagane przez skrypt. W poniższym przykładzie przedstawiono niektóre parametry skryptu, ale musisz dostosować parametry skryptu.

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

Po wybraniu pozycji Zapisz potok kompilacji zostanie uruchomiony automatycznie. Wróć do podsumowania potoku kompilacji i sprawdź stan.

View results

Możesz wybrać aktualnie uruchomiony potok, aby wyświetlić szczegółowe informacje o zadaniach. Po zakończeniu zobaczysz wyniki dla każdego kroku.

Kopiowanie i wdrażanie zadań

W tej sekcji przedstawiono sposób konfigurowania ciągłego wdrażania przy użyciu dwóch zadań. Pierwsze zadanie etapuje artefakty na koncie magazynu, a drugie zadanie wdraża szablon.

Aby skopiować pliki na konto magazynu, jednostka usługi dla połączenia z usługą musi mieć przypisaną rolę Współautor danych obiektu blob usługi Storage lub Właściciel danych obiektu blob usługi Storage. Aby uzyskać więcej informacji, zobacz Wprowadzenie do narzędzia AzCopy.

Poniższy kod YAML przedstawia zadanie kopiowania plików platformy 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

Istnieje kilka części tego zadania, które należy skorygować w danym środowisku. Element SourcePath wskazuje lokalizację artefaktów względem pliku potoku.

SourcePath: '<path-to-artifacts>'

W polu azureSubscriptionpodaj nazwę utworzonego połączenia z usługą.

azureSubscription: '<your-connection-name>'

W przypadku nazwy magazynu i kontenera podaj nazwy konta magazynu i kontenera, którego chcesz użyć do przechowywania artefaktów. Konto magazynu musi istnieć.

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

Po utworzeniu zadania kopiowania pliku możesz dodać zadanie w celu wdrożenia szablonu etapowego.

Poniższy kod YAML przedstawia zadanie wdrażania szablonu usługi 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'

Istnieje kilka części tego zadania, które należy przejrzeć bardziej szczegółowo.

  • deploymentScope: wybierz zakres wdrożenia z opcji: Management Group, Subscriptioni Resource Group. Aby dowiedzieć się więcej o zakresach, zobacz Zakresy wdrażania.

  • azureResourceManagerConnection: podaj nazwę utworzonego połączenia z usługą.

  • subscriptionId: podaj identyfikator subskrypcji docelowej. Ta właściwość ma zastosowanie tylko do zakresu wdrożenia grupy zasobów i zakresu wdrożenia subskrypcji.

  • resourceGroupName i location: podaj nazwę i lokalizację grupy zasobów, w której chcesz wdrożyć. Zadanie tworzy grupę zasobów, jeśli nie istnieje.

    resourceGroupName: '<resource-group-name>'
    location: '<location>'
    
  • csmFileLink: podaj link dla przygotowanego szablonu. Podczas ustawiania wartości użyj zmiennych zwracanych z zadania kopiowania plików. Poniższy przykład zawiera linki do szablonu o nazwie mainTemplate.json. Folder o nazwie templates jest dołączony, ponieważ miejsce, do którego zadanie kopiowania plików skopiowało plik. W potoku podaj ścieżkę do szablonu i nazwę szablonu.

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

Potok wygląda następująco:

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'

Po wybraniu pozycji Zapisz potok kompilacji zostanie uruchomiony automatycznie. W obszarze ramki Zadania wybierz pozycję Zadanie , aby wyświetlić stan zadania.

Następne kroki