Как получить доступ к переменным конвейера в условиях

#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 }}