Я столкнулся с точно такой же проблемой - конвейер, принимающий параметры времени выполнения, которые работали при запуске через пользовательский интерфейс, но не через API REST сборки очереди * .
, который мне удалось решить это с помощью недокументированного API, точно такого же, который пользовательский интерфейс Az DevOps Pipelines вызывает при запуске конвейера:
https://dev.azure.com/{organization}/{project}/_apis/pipelines/{pipelineId}/runs?api-version=5.1-preview
со следующим телом POST:
{
"stagesToSkip": [],
"resources": {
"repositories": {
"self": {
"refName": "refs/heads/master"
}
}
},
"templateParameters": {
"testParam": "hello world"
},
"variables": {}
}
Обратите внимание, что с этим API ваши параметры времени выполнения представляются как фактические JSON, не строковые JSON и под ключом templateParameters
.
Также не забудьте включить стандартные заголовки, которые можно ожидать для этого вызова:
Content-Type: application/json
Accept: application/json
AUTHORIZATION: bearer $SYSTEM_ACCESSTOKEN
.
Используя этот подход, в вызываемом конвейере вы всегда сможете получить доступ к значению ${{ parameters.testParam }}
, независимо от того, вызывается ли конвейер через REST API или вручную в пользовательском интерфейсе.
Пока вы правильно указали значение доступен как $(testParam)
при выполнении через REST API, эта переменная не является pop При использовании конвейера в пользовательском интерфейсе.
Поэтому я бы рекомендовал использовать этот недокументированный API, поскольку вызываемый конвейер может использовать ${{ parameters.testParam }}
независимо от того, как он вызывается. Конечно, он (на момент написания) недокументирован, так что ... ¯_ (ツ) _ / ¯
Также следует отметить, что ваш конвейер должен быть отформатирован как @ Jo sh Gust предложено:
my-template.yaml:
parameters:
- name: testParam
type: string
default: 'N/A'
steps:
- script: echo ${{ parameters.testParam }}
azure -pipelines.yaml:
parameters:
- name: testParam
type: string
default: 'N/A'
trigger:
- master
extends:
template: my-template.yaml
parameters:
testParam: ${{ parameters.testParam }}