Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Вы можете интегрировать шаблоны 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 выберите Pipelines и Создать конвейер.
Укажите место хранения кода. На следующем рисунке показано, как выбрать 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-объектов хранилища. Дополнительные сведения см. в статье "Начало работы с 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 с What-If в конвейере".
- Сведения об использовании шаблонов ARM с GitHub Actions см. в статье "Развертывание шаблонов Azure Resource Manager с помощью GitHub Actions".