У меня есть сложный конвейер, который используется несколькими проектами для интеграционного тестирования. Он определяет ресурсы в корневом файле 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)
Можно ли сослаться на информацию репо и передать ее в шаблон?
@kuga Спасибо, но это вызвало «Нераспознанное значение: ресурсы». ошибка
@MikeWorsley, вам нужно определить переменную и использовать ее в качестве параметра шаблона. Вы можете найти использование в документе resources.repositories.repositoryvariable. Также убедитесь, что параметр типа object
определен в шаблоне, чтобы получить значение, я добавил подробности ниже, спасибо.
Метаданные ресурса репозитория доступны для всех заданий в виде переменных времени выполнения.
Вместо:
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 ]' как литеральную строку.
@MikeWorsley попробуйте сначала объявить переменную, как в моем втором примере.
Второй пример от @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 }}
Пробовали
${{ resources('repositories.TestData.ref') }}
? Я знаю о проблемах с . в именах переменных, подобных этому.