#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 так, чтобы оно выполнялось по расписанию.