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
Jeśli potok nie został wcześniej dodany, 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 Azure Repos Git.
W tym źródle wybierz repozytorium zawierające kod projektu.
Wybierz typ potoku do utworzenia. Możesz wybrać potok startowy.
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@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 automatycznie uruchomiony. Wstecz podsumowanie potoku kompilacji i watch 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 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 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.
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
,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 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
- Aby użyć operacji analizy warunkowej w potoku, zobacz Testowanie szablonów usługi ARM przy użyciu What-If w potoku.
- Aby dowiedzieć się więcej na temat używania szablonów usługi ARM z GitHub Actions, zobacz Wdrażanie szablonów usługi Azure Resource Manager przy użyciu GitHub Actions.