#azure #azure-devops #azure-pipelines
#azure #azure-devops #azure-конвейеры
Вопрос:
У меня есть конвейер, в котором выполняется шаблон в качестве одного из шагов.
Мне нужен шаблон выполнения с двумя разными областями параметров, зависящими от значения одной из переменных конвейера.
Например, если переменная конвейера ‘mode’ имеет значение ‘dev’, мне нужен шаблон запуска с одной областью, если значение равно ‘stage’, другой области.
- ${{ if eq(parameters.mode, 'dev') }}:
- template: ../template.yaml
parameters:
mode: dev
namespace: dev-namespace
fqdn: dev-fqdn
- ${{ if eq(variables.mode, 'staging') }}:
- template: ../template.yaml
parameters:
mode: staging
namespace: staging-namespace
fqdn: staging-fqdn
Комментарии:
1. Привет, как насчет проблемы? Разрешает ли приведенный ниже ответ ваш вопрос, если да, вы могли бы принять его в качестве ответа , чтобы он мог помочь другим членам сообщества, у которых возникают те же проблемы, и мы могли бы заархивировать эту тему, спасибо.
Ответ №1:
Вы должны использовать этот синтаксис ${{ if eq(variables['mode'], 'staging') }}:
Ответ №2:
Это зависит от того, в какое время переменные будут считаны в at и использованы. Существует более чем возможный ответ.
При использовании их для будущего выполнения шаблона я бы рекомендовал использовать condition и определять имеющиеся у вас параметры в отдельных файлах переменных yml.
condition: eq('${{ variables.mode}}', 'staging)
Таким образом, вызов был бы просто
job:
condition: eq('${{ variables.mode}}', 'staging')
variables: staging.yml
- template: ../template.yaml
parameters:
mode: ${{ variables.mode }}
namespace: ${{ variables.namepsace }}
fqdn: ${{ variables.fqdn }}
И промежуточная обработка.yml будет выглядеть следующим образом:
variables:
mode: staging
namespace: staging-namespace
fqdn: staging-fqdn
Таким образом, это немного менее развязано и масштабируемо, не требуя каждый раз жесткого кода.
Ответ №3:
1. Если вы используете параметры времени выполнения, вы можете использовать этот формат:
trigger:
- master
parameters:
- name: mode
displayName: Choose mode
type: string
default: dev
values:
- dev
- staging
pool:
vmImage: 'windows-latest'
steps:
- ${{ if eq(parameters.mode, 'dev') }}:
- template: template.yml
parameters:
mode: dev
- ${{ if eq(parameters.mode, 'staging') }}:
- template: template.yml
parameters:
mode: staging
Для получения более подробной информации вы можете проверить параметры для выбора шаблона во время выполнения.
2. Если вы используете переменные, определенные непосредственно в yaml, проверьте мой другой пример:
trigger:
- master
variables:
mode: staging
pool:
vmImage: 'windows-latest'
stages:
- stage: Dev
condition: eq(variables.mode, 'dev')
jobs:
- job:
steps:
- template: template.yml
parameters:
mode: dev
- stage: Staging
condition: eq(variables.mode, 'staging')
jobs:
- job:
steps:
- template: template.yml
parameters:
mode: staging
Я бы порекомендовал способ с параметрами времени выполнения, потому что это более удобно и намного гибче.
Обновление1:
Вот мой простой template.yml
файл, который предназначен только для тестирования:
parameters:
- name: mode
type: string
default: default
steps:
- script: echo ${{ parameters.mode }}