Azure конвейер DevOps для развертывания только измененных шаблонов рук - PullRequest
1 голос
/ 09 апреля 2020

У нас есть проект с репо на Azure DevOps, где мы храним ARM-шаблоны нашей инфраструктуры. Чего мы хотим добиться - это развертывать шаблоны при каждом коммите в основной ветке

Вопрос в следующем: возможно ли определить один конвейер, который может инициировать развертывание только шаблонов ARM, измененных с помощью этого коммита? Давайте go с примером. У нас 3 шаблона в репо:

t1.json
t2.json
t3.json

Последний коммит изменился только в t2. json. В этом случае мы хотим, чтобы конвейер развернул только t2. json как t1. json и t3. json в этом коммите не было изменено.

Возможно ли создать один универсальный конвейер или нам лучше создать отдельный конвейер для каждого шаблона, который запускается коммитом для указанного файла c?

Ответы [ 2 ]

1 голос
/ 10 апреля 2020

Можно определить только один конвейер для развертывания измененного шаблона. Вам нужно добавить задачу скрипта, чтобы получить измененное имя файла шаблона в вашем конвейере.

Измененные файлы легко получить с помощью команд git git diff-tree --no-commit-id --name-only -r commitId. Когда вы получите измененное имя файла, вам нужно присвоить его переменной , используя выражение ##vso[task.setvariable variable=VariableName]value. Затем вы можете установить параметр csmFile, как этот csmFile: '**\$(fileName)' в задаче AzureResourceGroupDeployment

Вы можете проверить ниже конвейер yaml, например:

- powershell: |
   #get the changed template
   $a = git diff-tree --no-commit-id --name-only -r $(Build.SourceVersion)  

   #assign the filename to a variable        
   echo "##vso[task.setvariable variable=fileName]$a" 

- task: AzureResourceGroupDeployment@2
  inputs:
    ....
    templateLocation: 'Linked artifact'
    csmFile: '**\$(fileName)'

Также легко определить несколько конвейеров, чтобы достичь только развертывание измененного шаблона. Вам нужно только добавить триггер paths в указанный файл шаблона c в каждом конвейере. Таким образом, измененный файл шаблона запускает только соответствующий ему конвейер.

trigger: 
  paths:
    include: 
    - pathTo/template1.json
...

 - task: AzureResourceGroupDeployment@2
      inputs:
        ....
        templateLocation: 'Linked artifact'
        csmFile: '**\template1.json'

Надеюсь, что выше поможет!

0 голосов
/ 09 апреля 2020

То, что вы спросили, не поддерживается из коробки. Из того, что я понял, вы хотите иметь триггеры (основанные на изменении файла) для шага или задания (в зависимости от того, как вы организуете свой конвейер). Тем не менее, я не уверен, если вам это нужно. Развертывание шаблона ARM, который не был изменен, не повлияет на Azure ресурсы, если вы используете Create Or Update Resource Group do c здесь

Вы также можете попытаться вручную определить, какой файл был изменен ( используя powershell, например, и git команды), затем установите флаг, а затем используйте этот флажок для запуска или не выполнения некоторых шагов. Но это похоже на излишество за то, чего ты хочешь достичь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...