Передача выходной переменной в шаблон в том же задании в Azure DevOps

Я пытаюсь передать переменную, которая выводится в шаблоне, состоящем из шагов, в другой шаблон шагов в том же задании, настройка выглядит следующим образом:

Ошибка:

Значение параметра semVersion не является допустимым значением.

jobs:
     - job: job_git_tag
       displayName: Tag new version

       steps:
         - template: /templates/git/semantic_version_type.yaml
           parameters:
             semVersion: ${{ parameters.semVersion }}
         
         - template: /templates/git/git_tag.yaml
           parameters:
             module: ${{ parameters.module }}
             semVersion: $(Type.Semversion)

Семантическая версия шаблона

parameters:
  - name: semVersion
    type: string
    default: auto
    values:
      - major
      - minor
      - patch
      - auto

steps:
  - ${{ if eq(variables['Build.Reason'], 'PullRequest') }}:
    - bash: |
           ### do some scripting magic and output variable
           echo "##vso[task.setvariable variable=semVersion;isOutput=true]major"
    displayName: Get semantic version type
    name: Type

Шаблон тега Git

parameters:
  - name: module
    type: string
  - name: semVersion
    type: string
    default: patch
    values:
      - major
      - minor
      - patch

steps:

  - bash: |
      ### here the repository is checkedout and tagged with the correction version after being bumped.
    displayName: Tag new version

В чем должна быть проблема? Есть ли ошибка? Переменная пуста? ...

Rui Jarimba 01.07.2024 11:32

@RuiJarimba добавил ошибку в описание.

Faisal 01.07.2024 11:52

Не могли бы вы добавить определение параметров конвейера в первый блок (job: job_git_tag)?

Rui Jarimba 01.07.2024 12:12

Выходная переменная semVersion будет установлена ​​только тогда, когда Build.Reason==PullRequest. Каким должно быть поведение, когда конвейер НЕ работает как часть запроса на включение?

Rui Jarimba 01.07.2024 12:16
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
67
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

parameters оцениваются в compile time перед запуском конвейера, передача значения переменных из 1-го шаблона в качестве параметра 2-го шаблона не поддерживается.

В качестве альтернативы вы можете удалить semVersion: $(Type.Semversion) для второго шаблона, напрямую вызвать его в шаблоне.

jobs:
- job: job_git_tag
  displayName: Tag new version

  steps:
    - template: /templates/git/semantic_version_type.yaml
      parameters:
        semVersion: ${{ parameters.semVersion }}
    
    - template: /templates/git/git_tag.yaml
      parameters:
        module: ${{ parameters.module }}

И второй шаблон:

parameters:
  - name: module
    type: string
  # - name: semVersion
  #   type: string
  #   default: patch
  #   values:
  #     - major
  #     - minor
  #     - patch

steps:

  - bash: |
      echo $(Type.Semversion)
    displayName: Tag new version

Вывод на моей стороне:

Ответ принят как подходящий

Вы устанавливаете список разрешенных значений для параметра semVersion в шаблонах:

parameters:
  - name: semVersion
    type: string
    default: auto
    values:
      - major
      - minor
      - patch
      - auto

Но конвейер завершится ошибкой со следующей ошибкой, поскольку $(Type.semVersion) будет создан во время выполнения, т. е. он не существует при компиляции конвейера:

Обнаружены ошибки при анализе YAML конвейера: /pipelines/test01-pipeline.yaml (строка: 29, столбец: 23): значение параметра «semVersion» «$(Type.semVersion)» не является допустимым значением.

В качестве обходного пути вы можете удалить список разрешенных значений:

parameters:
  - name: semVersion
    type: string
    default: auto

Или, как вариант, добавьте $(Type.semVersion) в список:

parameters:
  - name: semVersion
    type: string
    default: auto
    values:
      - major
      - minor
      - patch
      - auto
      - $(Type.semVersion)

Другие вопросы по теме