Создание конвейера динамического выпуска Azure DevOps

В настоящее время я планирую создать тип мультитенантной системы, в которой различные группы ресурсов с набором AppServices будут развертываться для клиентов с помощью шаблонов ARM. Следовательно, у каждого клиента есть собственная группа ресурсов и набор AppServices. В настоящее время мы используем Azure DevOps для развертывания в наборе AppServices, используемых для разработки и обеспечения качества, прежде чем он попадет в производство. Теперь я пытаюсь включить DevOps в микс, автоматизируя создание конвейера какого-то типа ... (это будет копия существующего конвейера, но только с изменением Target AppServices). Из чего пришел мой вопрос: есть ли способ динамически создавать или редактировать конвейер выпуска, чтобы добавить развертывание этих новых AppServices, без необходимости вручную редактировать или создавать конвейер, добавляя эти недавно созданные AppServices, я что-то думал вокруг строк возможности скопировать шаблон файла yaml, а затем заменить необходимую информацию, чтобы указать на эти службы AppServices после того, как они были созданы, но я не совсем уверен, где я могу сохранить новый файл yaml, чтобы он был подхвачен Azure DevOps, или как я мог бы это сделать, с основной идеей, чтобы все это продолжало быть частью автоматизированного процесса (если возможно).

Большое спасибо за любую помощь, любое предложение приветствуется.

РЕДАКТИРОВАТЬ:

Вопрос не в том, как развернуть шаблон ARM через конвейер выпуска DevOps (для этого я планирую использовать PowerShell Script / REST API), а в том, когда создаются ресурсы AppServices, мне нужно развернуть код для них. недавно созданные AppServices, а также при необходимости обновлять этот код (надеюсь, через конвейер выпуска) каким-то образом генерировать новый конвейер выпуска каждый раз, когда я развертываю новый набор ресурсов. Таким образом, при появлении нового обновления я мог бы легко запустить этот конвейер и установить, если AppServices может быть обновлен (создан как часть процесса автоматизации динамически). (У меня уже есть аналогичный конвейер, который развертывается в статическом наборе AppServices)


person Juan P. Garces    schedule 19.10.2020    source источник
comment
PT 1. Я все еще не думаю, что на вопрос дан ответ. Ответ DreadedFrost был очень полезным (в настоящее время я не могу проголосовать за, если бы не стал), но это не ответ. Я точно знаю, что не найду однозначного ответа на эту проблему, но, по крайней мере, что-то более близкое к тому, к чему относится вопрос, что в итоге сводится к следующему: есть ли способ динамически генерировать конвейер выпуска ПОСЛЕ развертывания нового приложения Услуги с использованием шаблона ARM наиболее автоматизированным способом.   -  person Juan P. Garces    schedule 26.10.2020
comment
PT 2. Я уже знаю, как может выглядеть шаблон YAML для развертывания в AppServices, но мне нужно знать, как мне запустить новый конвейер для каждого из новых созданных AppServices (через ARM). Если мне что-то не хватает в ответе DreadedFrost, который является ответом на мой вопрос, я прошу прощения. Спасибо   -  person Juan P. Garces    schedule 26.10.2020
comment
Почему вам нужно каждый раз создавать новый конвейер выпуска? Если вам нужно обновить ресурс, просто обновите шаблон и повторно разверните его, чтобы охватить его.   -  person Hugh Lin    schedule 29.10.2020


Ответы (1)


Это возможно, поскольку вы ускользнули от YAML Pipelines. В зависимости от сценария, на который вы подписались, каждый репозиторий будет иметь свой собственный файл pipeline.yml, который будет определять триггер, пул и т. Д. Он также будет ссылаться на репозиторий, в котором будет размещен ваш шаблон yaml.

Шаблон примет любые параметры, которые вам могут потребоваться (группа ресурсов, имя службы приложения и т. Д.). Конвейер запуска, связанный с каждым репозиторием, будет передавать эту информацию, используя командную табличку.

Таким образом можно настроить CI / CD для запуска на отдельных конвейерах и развертывания соответствующего кода при одновременном использовании одного и того же шаблона YAML.

Ссылка на репозиторий будет похожа на:

resources:
  repositories:
  - repository: YAMLTemplates
    type: git
    name: OrginazationName/YAML Project Name

При вызове шаблона аналогично:

- template: azure-ARM-template.yml@YAMLTemplate
  parameters:
    appServiceName: 'AppServiceName'
    resourceGroupName: 'ResourceGroupName'

ОБНОВЛЕНИЕ
На высоком уровне конвейер YAML будет состоять из следующего. Если все службы приложений похожи, как указано, и шаблоны ARM похожи, вот как они могут быть созданы и запущены на основе пути к папке:

Освободите компоненты развертывания для каждой среды на соответствующих этапах, чтобы уменьшить объем копирования и вставки. Каждая из вышеперечисленных задач может быть частью шаблона либо по отдельности в задаче, либо в комбинации задач, либо все в одном. Это позволило бы определить YAML один раз и ссылаться на него, а также включать компоненты, специфичные для приложения, по мере необходимости в качестве параметров для шаблонов.

person DreadedFrost    schedule 19.10.2020
comment
Хм, мне нравится ваше предложение с указанным шаблоном, который принимает необходимые параметры для развертывания в этих appServices (я имел в виду нечто подобное). Я думаю, что части все еще не хватает, или, может быть, я не совсем понял ее. На данный момент вся производственная кодовая база AppServices будет находиться в одной и той же ветке / репозитории git (являясь готовым кодом для производства), и создание этого набора AppServices может быть запущено в любое время (допустим, вызов REST API), как будет ли DevOps знать, как создать конвейер выпуска для нового набора AppServices. Спасибо за ваш ответ! - person Juan P. Garces; 19.10.2020
comment
Хорошо. Еще могу это сделать. В одном репо будет храниться несколько конвейеров. Триггер будет обновлен с использованием включения и правильного пути к папке для каждого из них. - person DreadedFrost; 19.10.2020
comment
Извините, я должен был уточнить, я внесу правку в сообщение. Не должно возникнуть проблем с развертыванием шаблонов ARM с помощью сценария PowerShell или даже вызова REST API (другими словами, создания ресурсов), моя текущая проблема заключается в том, чтобы поддерживать эти новые ресурсы в актуальном состоянии при развертывании новой базы кода. . Таким образом, создается конвейер DevOps для развертывания кода на этих ресурсах в будущем. - person Juan P. Garces; 20.10.2020
comment
Тот же процесс - person DreadedFrost; 20.10.2020
comment
Если я правильно понимаю, после развертывания шаблона ARM и создания AppServices вы предлагаете добавить / зафиксировать конвейер YAML (ссылающийся на новые AppServices) в репозиторий, чтобы позже в процессе выпуска его можно было запустить? - person Juan P. Garces; 20.10.2020
comment
Я обновил ответ. Лично я все время повторно развертываю ARM и службу приложений вместе, хотя знаю, что есть разногласия по этому поводу. Когда вы пишете YAML для каждого конвейера и обнаруживаете, что копируете и вставляете, тогда неплохо посмотреть, как использовать шаблоны. Проголосуйте также за ответ, если вы сочли его полезным. - person DreadedFrost; 21.10.2020