Шаблоны YAML конвейера Azure — Есть ли способ проверить и подтвердить, охватывает ли конвейер все необходимые задания при использовании шаблона?

#templates #azure-devops #azure-pipelines #pipeline #azure-pipelines-yaml

Вопрос:

Мы используем конвейеры yaml в Azure Devops вместе с шаблонами. Требование состоит в том, чтобы определить, выполняется ли на всех конвейерах, использующих шаблон, необходимый набор шагов или нет? Есть ли какой-либо способ подтвердить это, кроме ручного мониторинга.

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

Чтобы объяснить в качестве примера, предположим, что шаблон содержит 4 задачи для выполнения 4 различных типов тестов. С помощью этого шаблона создается несколько трубопроводов. Они могут выбрать выполнение этих тестов, включив его (установите значение Да/Нет во входном параметре). Нам нужно проверить и убедиться, что все конвейеры выполняют все эти 4 теста.

Комментарии:

1. Можете ли вы привести пример того, чего вы хотите достичь? Возможно, шаблон расширения — это то, что вы ищете. Пожалуйста, проверьте также здесь . Вы также можете установить необходимый шаблон для параметров утверждения среды и проверки.

2. @KrzysztofMadej Спасибо за подробности. Чтобы объяснить в качестве примера, предположим, что шаблон содержит 4 задачи для выполнения 4 различных типов тестов. С помощью этого шаблона создается несколько трубопроводов. Они могут выбрать выполнение этих тестов, включив его (установите значение Да/Нет). Нам нужно проверить и убедиться, что все конвейеры выполняют все эти 4 теста.

Ответ №1:

Простого способа сделать это нет, так как у нас нет возможности получить подробную информацию об используемых теплоотводах через REST API или любым другим способом. Что вы можете сделать, это попытаться немного шаблонизировать это. Поэтому сначала вам нужно создать такой шаблон, как:

 paramaters:
- name: repositoryName
  type: string
  default: 'self'    
- name: pipelinePath
  type: string
  default: ''  # if your pipeline file has always the same name you can put it here and do not set calling pipeline   

jobs:
- job: '${{ parameters.repositoryName }}' # please easnure that you repository name is a valid job name
  dependsOn: []
  steps:
  - checkout: ${{ parameters.repositoryName }}
  - pwsh: |
      Here you should use yq tool to extract steps which uses your template
      Then manipulate it to be sure that it checks you conditions
      And then send some alerts to slack or wahtever you want

 

Затем вы можете вызвать его из конвейера, например:

 parameters:
 - name: repositories
  type: object
  default:
  - RepoA
  - RepoB
  - list all your repos here

resources:
  repositories:
  - repository: RepoA
    type: git
    name: RepoA
  - repository: RepoB
    type: git
    name: RepoB
  - list the same repos here to be sure you have permission to use them in the pipeline

jobs:
# I assumed that `pipelinePath` is always the same and set as default an thus we can use each expression. If not you will have to call it one by one
- ${{ each repository in parameters.repositoryName }}: 
  - template: template.yml
    paramaters:
      repositoryName: ${{ repository  }} 
 

Вот потенциальное решение. Я не могу предоставить полную информацию, но я думаю, что эта идея ясна. Я предложил использовать инструмент yq, но вы можете использовать все, что захотите, что поможет вам убедиться, что шаблоны используются должным образом. Кроме того, вы можете настроить задание cron так, чтобы оно выполнялось по расписанию.