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
Jeśli wcześniej nie dodano potoku, musisz utworzyć nowy potok. W organizacji usługi Azure DevOps wybierz pozycję Potoki i Nowy potok.
Określ miejsce przechowywania kodu. Na poniższej ilustracji przedstawiono wybieranie usługi Azure Repos Git.
Z tego źródła wybierz repozytorium zawierające kod projektu.
Wybierz typ potoku do utworzenia. Możesz wybrać pozycję Potok startowy.
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@5
wartość 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 azureSubscription
podaj nazwę utworzonego połączenia usługi.
inputs:
azureSubscription: '<your-connection-name>'
W polu scriptPath
podaj ś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 ScriptArguments
pliku 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.
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 azureSubscription
podaj 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
,Subscription
iResource 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
ilocation
: 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
- Aby użyć operacji analizy co-jeżeli w potoku, zobacz Testowanie szablonów usługi ARM przy użyciu analizy warunkowej w potoku.
- Aby dowiedzieć się więcej na temat używania szablonów usługi ARM z funkcją GitHub Actions, zobacz Wdrażanie szablonów usługi Azure Resource Manager przy użyciu funkcji GitHub Actions.