Azure Pipelines — справочник ресурсов

У меня есть сложный конвейер, который используется несколькими проектами для интеграционного тестирования. Он определяет ресурсы в корневом файле Yaml и в большинстве случаев использует «checkout» для извлечения соответствующего репозитория агенту тестирования, где он затем копируется на тестовый хост и устанавливается. Однако для одного проекта этот подход добавляет 20–30 минут из-за размера репозитория, и было принято решение передать информацию о соответствующей ветке на тестовый хост и вместо этого выполнить git pull оттуда.

Все работало нормально, однако было замечено, что было два поля, в которые вводилась информация о ветке, что вызывало путаницу. Первый, который представлял собой стандартный диалог определения ресурса, игнорировался, и вместо этого информация вводилась из текстового поля, введенного вручную. Поскольку это могло привести к ошибкам, было реализовано изменение, позволяющее удалить текстовое поле и передать вместо него ветку выбранного ресурса. Однако попытка сослаться на это оказывается проблематичной.

Ниже приведена очищенная версия корневого yaml:

parameters:
  - name: resourceTypes
  ...
  - name: deployEXE
  ...

trigger: ...

resources:
  pipelines:
  - pipeline: ...
  repositories:
  - repository: TestData
    type: git
    name: testdata
    ref: refs/heads/master



extends:
  template: pipeline-template.yml
  parameters:
    jobName: 'Nightly Testing'
    testHost: 'VM Name'
    testTask: '.'
    deployExe: ${{parameters.deployExe}}
    checkoutTemplate: checkout-steps.yml
    postTestTemplate: post-test-steps.yml
    agentPool: test-agents
    agentName: VTMAGENT
    usesTemplate:
      repositories:
       - TestData
    hasOtherOutput: true
    timeoutInMinutes: 180
    additionalData: 
      - ${{parameters.resourceTypes}}
      - ${{resources.repositories.TestData.ref}}

Суть в том, что это проблема. Ссылка на репозиторий с использованием двойных скобок ${{resources.repositories.TestData.ref}} генерирует ошибку, которая resources является неизвестным именем.

Ссылка с использованием одинарной скобки $(resources.repositories.TestData.ref) передает ее как буквальную строку, поэтому git pull пытается вытащить ветку с именем $(resources.repositories.TestData.ref)

Можно ли сослаться на информацию репо и передать ее в шаблон?

Пробовали ${{ resources('repositories.TestData.ref') }}? Я знаю о проблемах с . в именах переменных, подобных этому.

kuga 17.04.2024 12:35

@kuga Спасибо, но это вызвало «Нераспознанное значение: ресурсы». ошибка

Mike Worsley 17.04.2024 12:54

@MikeWorsley, вам нужно определить переменную и использовать ее в качестве параметра шаблона. Вы можете найти использование в документе resources.repositories.repositoryvariable. Также убедитесь, что параметр типа object определен в шаблоне, чтобы получить значение, я добавил подробности ниже, спасибо.

wade zhou - MSFT 23.04.2024 05:32
Стоит ли изучать 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
3
71
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Метаданные ресурса репозитория доступны для всех заданий в виде переменных времени выполнения.

Вместо:

additionalData: 
  - ${{parameters.resourceTypes}}
  - ${{resources.repositories.TestData.ref}}

Пытаться

additionalData: 
  - ${{parameters.resourceTypes}}
  - $[ resources.repositories.TestData.ref ]

Или, как альтернатива:

variables:
  ref: $[ resources.repositories.TestData.ref ]

# .....
additionalData: 
  - ${{ parameters.resourceTypes }}
  - $(ref)

См. определение resources.repositories.repository и Понимание синтаксиса переменных

Спасибо, но это только что было передано в '$[ resources.repositories.TestData.ref ]' как литеральную строку.

Mike Worsley 17.04.2024 12:55

@MikeWorsley попробуйте сначала объявить переменную, как в моем втором примере.

Rui Jarimba 17.04.2024 12:59

Второй пример от @RuiJarimba верен. Вам необходимо определить переменную и использовать ее в качестве параметра шаблона. Вы можете найти использование в документе resources.repositories.repositoryvariable.

Кроме того, в yaml шаблона вам необходимо определить параметр типа object, поскольку у вас есть два значения с - в основном yaml. Вы можете проверить каждое значение элемента с помощью отдельной команды echo.

шаблон YAML:

parameters:
  - name: jobName
    type: string
    default: 'job1'
  .....

  - name: additionalData
    type: object
    default: []

jobs:
- job: job1
  steps:
  - ${{ each data in parameters.additionalData }}:
    - script: echo ${{ data }}

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

Конвейеры Azure ссылаются на переменную репозитория для оператора if в шаблоне переменных
Тестовый пример Pester выдает ошибку в BeforeDiscovery с нулевым значением
Не запускать запуск сборки, когда изменения происходят в определенной папке
Скрипт Powershell New-AzRoleAssignment с Azure Devops: операция вернула неверный код состояния «Запрещено»
Как использовать интерфейс командной строки azcopy в Azure Devops Pipelines, работающем в Linux, с использованием управляемого удостоверения для аутентификации в общем файловом ресурсе Azure без токена SAS?
Отправьте файлы в хранилище Azure с помощью Azure Devops Pipeline. невозможно запустить задание из-за ошибки: невозможно просканировать путь \\?\D:\a\1\s\drop\editor-docs
Автоматический запуск агента для автономных конвейеров yaml в Azure DevOps
Обеспечивает передачу выходных данных с одного шага шаблона задания на другой шаг шаблона задания
Расписание конвейера Azure YAML будет запускаться в последнее воскресенье месяца в 4 утра
Использование составных переменных в задаче Azure DevOps ManualValidation@0

Похожие вопросы

Невозможно использовать переменную из файла шаблона в качестве подключения к сервису AWS в конвейере Azure YAML
Конвейеры Azure ссылаются на переменную репозитория для оператора if в шаблоне переменных
Как извлечь имя параметра среды выполнения из Azure Devops? Я хочу извлечь имя веб-перехватчика, который запустил конвейер?
Назначение условного списка в конвейерах Azure
Образ Docker создан, но не найден локально при выполнении теста покрытия в конвейере Azure
Запускайте конвейер только после завершения слияния запроса на извлечение
Проблема с динамическим комментарием Azure DevOps на GitHub и статусом выхода 1
Группа переменных не разрешена в задаче создания файлов в Azure Pipelines
При запуске службы Docker происходит сбой нестандартного конвейера Azure
Копирование файлов с одной виртуальной машины на другую виртуальную машину с помощью конвейера Azure DevOps