Конвейер restAPI Azure DevOps Как передать переменную с помощью SourceFolder для задачи CopyFiles, самостоятельно размещенного агента в контейнере
Моя настройка выглядит следующим образом. У меня есть размещенный агент, который в качестве первого задания копирует файлы из автономного агента, который запускается как контейнер докеров
размещенный конвейер запускается с помощью конвейера "run" rest API:
https://docs.microsoft.com/en-us/rest/api/azure/devops/pipelines/runs/run%20pipeline?view=azure-devops-rest-6.0
вот так сейчас выглядит тело:
"resources": {
"repositories:": {
"self": {
"refName": "refs/heads/my_branch"
}
}
}
он отлично работает.
теперь часть размещенного конвейера выглядит так:
- job: self_hosted_connect
timeoutInMinutes: 10
pool: Default
steps:
- task: CopyFiles@2
inputs:
SourceFolder: '/home/copy_dir'
Contents: '**'
TargetFolder: '$(build.artifactstagingdirectory)'
также отлично работают.
Мои вопросы:
Мне нравится отправлять в "run" rest API еще один параметр, содержащий путь к SourceFolder, чтобы задача CopyFiles была динамической и не имела жесткого кода пути SourceFolder.
Когда я запускаю автономный агент из докера, как я могу сказать автономному агенту, чтобы он включил каталог за пределами его рабочего каталога? поэтому конвейер не выйдет из строя с ошибкой:
# [error] Unhandled: Not found SourceFolder: / home / copy_dir
ОБНОВЛЕНИЕ Я обновил запрос на:
{
"resources": {
"repositories:": {
"self": {
"refName": "refs/heads/my_branch"
}
}
},
"templateParameters": {
"Folderpath":"{/home/foo/my_dir}"
}
}
но я получаю сообщение об ошибке:
{
"$id": "1",
"innerException": null,
"message": "Unexpected parameter 'Folderpath'",
"typeName": "Microsoft.Azure.Pipelines.WebApi.PipelineValidationException, Microsoft.Azure.Pipelines.WebApi",
"typeKey": "PipelineValidationException",
"errorCode": 0,
"eventId": 3000
}
1 ответ
отправить в "run" rest API другой параметр, содержащий путь к SourceFolder. Мы можем использовать параметры времени выполнения в конвейере.
Образец YAML:
parameters:
- name: Folderpath
displayName: 'configure Folder path'
type: string
default: {SourceFolder path}
steps:
- task: CopyFiles@2
inputs:
SourceFolder: '${{ parameters.Folderpath}}'
Contents: '**'
TargetFolder: '$(build.artifactstagingdirectory)'
URL запроса:
POST https://dev.azure.com/{organization}/{project}/_apis/pipelines/{pipelineId}/runs?api-version=6.0-preview.1
Тело запроса:
{
"resources":{
"repositories":{
"self":{"refName":"refs/heads/{my_branch}"
}
}
},
"templateParameters": {
"Folderpath":"{SourceFolder path}"
}
}
как мне сказать агенту, размещенному на собственном хостинге, включить каталог за пределами его рабочего каталога?
Мы можем скопировать локальную папку или предопределенные переменные Azure DevOps, чтобы определить исходную папку.
Обновление1
Мы должны определить параметр в сборке YAML, в противном случае мы получим ошибку Неожиданный параметр 'Folderpath'"
ОБНОВЛЕНИЕ 2, так как мне нравится использовать реальный путь (тот, который я передаю в запросе) на диске, где работает автономный докер, а не относительно рабочего каталога докера, поэтому теперь он дает мне эту ошибку:
[error]Unhandled: Not found SourceFolder: /azp/agent/_work/1/s/{/home/copy_dir}
где /azp - рабочий каталог докера
я настроил докер по этой ссылке:
https://docs.microsoft.com/en-us/azure/devops/pipelines/agents/docker?view=azure-devops