Udostępnij za pośrednictwem


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 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 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 był używany 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 do konta magazynu, do którego usługa Resource Manager może uzyskać 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.

    Zrzut ekranu przedstawiający przycisk Dodaj nowy potok

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

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

  3. Z tego źródła 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ć pozycję Potok startowy.

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

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.

Następujący 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@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 uruchomiony automatycznie. Wróć do podsumowania potoku kompilacji i obejrzyj 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 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ć 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.

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: 'aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e'
    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 do przejrzenia 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 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: 'aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e'
    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 ramce Zadania wybierz pozycję Zadanie , aby wyświetlić stan zadania.

Następne kroki