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 swoją 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 najprostszą opcją. 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 Azure PowerShell. Ta opcja ma przewagę nad zapewnieniem 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 Azure PowerShell zadanie.

    Program Visual Studio udostępnia projekt grupy zasobów platformy Azure , który zawiera skrypt programu PowerShell. Skrypt wykonuje etapy artefaktów z projektu do konta magazynu, do którego Resource Manager może uzyskać dostęp. Artefakty są elementami w projekcie, takimi 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. Należy skonfigurować dwa zadania w potoku. Jedno zadanie tworzy etapy artefaktów w dostępnej lokalizacji. Inne 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 potok nie został wcześniej dodany, musisz utworzyć nowy potok. W organizacji usługi Azure DevOps wybierz pozycję Potoki i Nowy potok.

    Zrzut ekranu przedstawiający przycisk Dodaj nowy potok

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

    Zrzut ekranu przedstawiający wybieranie źródła kodu w usłudze Azure DevOps

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

    Zrzut ekranu przedstawiający wybieranie repozytorium projektu w usłudze Azure DevOps

  4. Wybierz typ potoku do utworzenia. Możesz wybrać potok startowy.

    Zrzut ekranu przedstawiający wybieranie typu potoku do utworzenia w usłudze Azure DevOps

Możesz dodać zadanie 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.

Następujący plik YAML tworzy zadanie 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@3.

steps:
- task: AzurePowerShell@3

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

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

W polu scriptPathpodaj ścieżkę względną z pliku potoku do skryptu. Możesz wyszukać w repozytorium, aby wyświetlić ś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 automatycznie uruchomiony. Wstecz podsumowanie potoku kompilacji i watch stan.

Zrzut ekranu przedstawiający widok wyników potoku w usłudze Azure DevOps

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 pokazano, jak skonfigurować ciągłe wdrażanie 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 usługi musi mieć przypisaną rolę Współautor danych obiektu blob magazynu 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 poprawić dla danego środowiska. Element SourcePath wskazuje lokalizację artefaktów względem pliku potoku.

SourcePath: '<path-to-artifacts>'

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

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.

W poniższym języku YAML przedstawiono 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 na temat zakresów, zobacz Zakresy wdrażania.

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

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

  • resourceGroupName i location: podaj nazwę i lokalizację grupy zasobów, do 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 uwzględniony, ponieważ to, 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 automatycznie uruchomiony. W ramce Zadania wybierz pozycję Zadanie , aby wyświetlić stan zadania.

Następne kroki