Интеграция шаблонов Resource Manager с Azure Pipelines
Вы можете интегрировать шаблоны Azure Resource Manager (шаблоны ARM) с Azure Pipelines, чтобы обеспечить непрерывную интеграцию и непрерывное развертывание (CI/CD). В этой статье вы узнаете о двух более усовершенствованных способах развертывания шаблонов с помощью Azure Pipelines.
Выбор способа
Прежде чем продолжить работу с этой статьей, рассмотрим различные варианты развертывания шаблона ARM из конвейера.
Использование задачи развертывания шаблона ARM. Этот вариант — самый простой. Этот способ подходит, если вы хотите развернуть шаблон непосредственно из репозитория. Данный способ не рассматривается в этой статье, а описывается в учебнике по непрерывной интеграции шаблонов ARM с Azure Pipelines. В нем показано, как использовать задачу развертывания шаблона ARM для развертывания шаблона из репозитория GitHub.
Добавление задачи, запускающей сценарий Azure PowerShell. Этот вариант обеспечивает согласованность в течение всего жизненного цикла разработки, так как позволяет использовать тот же сценарий, который использовался при выполнении локальных тестов. Сценарий развертывает шаблон, но также может выполнять другие операции, такие как получение значений, которые можно использовать в качестве параметров. Этот способ описан в данной статье. Ознакомьтесь с задачей Azure PowerShell.
Visual Studio предоставляет проект группы ресурсов Azure, включающий в себя сценарий PowerShell. Этот сценарий подготавливает артефакты из проекта и помещает их в учетную запись хранения, к которой имеет доступ Resource Manager. Артефакты — это элементы проекта, в том числе связанные шаблоны, сценарии и двоичные файлы приложения. Если вы хотите продолжить использовать сценарий из проекта, используйте задачу сценария PowerShell, описанную в этой статье.
Добавление задач для копирования и развертывания. Этот вариант является удобной альтернативой сценария проекта. В конвейере настраиваются две задачи. Одна задача подготавливает артефакты и помещает их в доступное расположение. Другая задача развертывает шаблон из этого расположения. Этот способ описан в данной статье. Ознакомьтесь с задачами копирования и развертывания.
Подготовка проекта
В этой статье предполагается, что ваш шаблон ARM и организация Azure DevOps готовы к созданию конвейера. Ниже показано, как обеспечить готовность к работе.
У вас должна быть организация Azure DevOps. Если у вас ее нет, создайте подписку бесплатно. Если у вашей команды уже есть организация Azure DevOps, убедитесь, что вы являетесь администратором проекта Azure DevOps, который вы хотите использовать.
Необходимо настроить подключение службы к подписке Azure. Задачи в конвейере выполняются с удостоверением субъекта-службы. Инструкции по созданию подключения см. в разделе Создание проекта DevOps.
У вас должен быть шаблон ARM, определяющий инфраструктуру для проекта.
Создание конвейера
Если вы еще не добавили конвейер, необходимо создать новый конвейер. В организации Azure DevOps выберите Конвейеры и Новый конвейер.
Укажите место хранения кода. На следующем рисунке показан выбор Azure Repos Git.
В этом источнике выберите репозиторий с кодом для проекта.
Выберите тип создаваемого конвейера. Можно выбрать Простейший конвейер.
Теперь все готово для добавления задачи Azure PowerShell или задач копирования файлов и развертывания.
Задача Azure PowerShell
В этом разделе показано, как настроить непрерывное развертывание с помощью одной задачи, запускающей сценарий PowerShell в проекте. Если вам нужен сценарий PowerShell, который развертывает шаблон, ознакомьтесь с файлом Deploy-AzTemplate.ps1 или Deploy-AzureResourceGroup.ps1.
Приведенный ниже YAML-файл создает задачу 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'
Если для задачи задано значение AzurePowerShell@5
, конвейер использует модуль Az. Если вы используете модуль AzureRM в сценарии, задайте для задачи значение AzurePowerShell@3
.
steps:
- task: AzurePowerShell@3
Для параметра azureSubscription
укажите имя созданного подключения к службе.
inputs:
azureSubscription: '<your-connection-name>'
Для параметра scriptPath
укажите путь к сценарию относительно файла конвейера. Чтобы увидеть этот путь, можно просмотреть репозиторий.
ScriptPath: '<your-relative-path>/<script-file-name>.ps1'
В разделе ScriptArguments
добавьте любые параметры, необходимые для сценария. В следующем примере показаны некоторые параметры сценария, но вам необходимо настроить параметры именно для вашего сценария.
ScriptArguments: -Location 'centralus' -ResourceGroupName 'demogroup' -TemplateFile templates\mainTemplate.json
После нажатия кнопки Сохранить конвейер сборки запустится автоматически. Вернитесь к сводке по конвейеру сборки и просмотрите его состояние.
Вы можете выбрать выполняющийся в данный момент конвейер, чтобы просмотреть сведения о задачах. По завершении выполнения вы увидите результаты для каждого этапа.
Задачи копирования и развертывания
В этом разделе показано, как настроить непрерывное развертывание с помощью двух задач. Первая задача подготавливает артефакты и перемещает их в учетную запись хранения, а вторая выполняет развертывание шаблона.
Чтобы скопировать файлы в учетную запись хранения, субъекту-службе для подключения к службе должна быть назначена роль участника данных BLOB-объекта хранилища или владельца данных BLOB-объекта хранилища. Дополнительные сведения см. в статье Начало работы с AzCopy.
В следующем фрагменте YAML показана задача копирования файлов 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
Несколько частей этой задачи следует изменить в соответствии с вашей средой. Параметр SourcePath
указывает расположение артефактов относительно файла конвейера.
SourcePath: '<path-to-artifacts>'
Для параметра azureSubscription
укажите имя созданного подключения к службе.
azureSubscription: '<your-connection-name>'
В качестве имен хранилища и контейнера укажите имена учетной записи хранения и контейнера, которые будут использоваться для хранения артефактов. Эта учетная запись хранения должна существовать.
storage: '<your-storage-account-name>'
ContainerName: '<container-name>'
После создания задачи копирования файлов можно приступить к добавлению задачи для развертывания подготовленного шаблона.
В следующем фрагменте YAML показана задача развертывания шаблона 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'
Следует подробнее рассмотреть несколько частей этой задачи.
deploymentScope
: выберите область развертывания из этих вариантов:Management Group
,Subscription
иResource Group
. Дополнительные сведения об областях см. в разделе Области развертывания.azureResourceManagerConnection
: укажите имя созданного подключения к службе.subscriptionId
: укажите идентификатор целевой подписки. Это свойство применяется, только если в качестве области развертывания выбрана группа ресурсов или подписка.resourceGroupName
иlocation
: укажите имя и расположение группы ресурсов, в которую требуется выполнить развертывание. Задача создаст группу ресурсов, если она еще не существует.resourceGroupName: '<resource-group-name>' location: '<location>'
csmFileLink
: укажите ссылку на подготовленный шаблон. При задании этого значения используйте переменные, возвращаемые задачей копирования файлов. В следующем примере создается ссылка на шаблон mainTemplate.json. Папка templates включается в область действия, так как задача копирования файлов скопировала файл именно в нее. В конвейере укажите путь к шаблону и имя шаблона.csmFileLink: '$(AzureFileCopy.StorageContainerUri)templates/mainTemplate.json$(AzureFileCopy.StorageContainerSasToken)'
Конвейер будет выглядеть следующим образом:
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'
После нажатия кнопки Сохранить конвейер сборки запустится автоматически. В кадре Задания выберите задание, чтобы просмотреть состояние этого задания.
Следующие шаги
- Сведения об использовании операции "что если" в конвейере см. в статье Тестирование шаблонов ARM с операцией "что если" в конвейере.
- Чтобы узнать об использовании шаблонов ARM с действиями GitHub, ознакомьтесь со статьей Развертывание шаблонов ARM с помощью действий GitHub.