Контекст выражения декоратора конвейера
Azure DevOps Services
Декораторы конвейеров имеют доступ к контексту о конвейере, в котором они выполняются. В качестве автора декоратора конвейера вы можете использовать этот контекст для принятия решений о поведении декоратора. Сведения, доступные в контексте, отличаются для конвейеров и выпуска. Кроме того, декораторы выполняются после разрешения имен задач для глобально уникальных идентификаторов задач (GUID). Если декоратор хочет ссылаться на задачу, он должен использовать GUID, а не имя или ключевое слово.
Совет
Ознакомьтесь с нашей новой документацией по разработке расширений с помощью пакета SDK для расширений Azure DevOps.
Ресурсы
Ресурсы конвейера доступны в объекте resources
.
Репозитории
В настоящее время существует только один ключ: repositories
repositories
— это сопоставление из идентификатора репозитория с сведениями о репозитории.
В сборке конструктора основной псевдоним репозитория — __designer_repo
это .
В конвейере YAML основной репозиторий называется self
.
В конвейере выпуска репозитории недоступны.
Доступны переменные артефакта выпуска.
Например, чтобы распечатать имя репозитория self
в конвейере YAML:
steps:
- script: echo ${{ resources.repositories['self'].name }}
Репозитории содержат следующие свойства:
resources['repositories']['self'] =
{
"alias": "self",
"id": "<repo guid>",
"type": "Git",
"version": "<commit hash>",
"name": "<repo name>",
"project": "<project guid>",
"defaultBranch": "<default ref of repo, like 'refs/heads/main'>",
"ref": "<current pipeline ref, like 'refs/heads/topic'>",
"versionInfo": {
"author": "<author of tip commit>",
"message": "<commit message of tip commit>"
},
"checkoutOptions": {}
}
Работа
Сведения о задании job
доступны для объекта.
Данные выглядят примерно так:
job =
{
"steps": [
{
"environment": null,
"inputs": {
"script": "echo hi"
},
"type": "Task",
"task": {
"id": "d9bafed4-0b18-4f58-968d-86655b4d2ce9",
"name": "CmdLine",
"version": "2.146.1"
},
"condition": null,
"continueOnError": false,
"timeoutInMinutes": 0,
"id": "5c09f0b5-9bc3-401f-8cfb-09c716403f48",
"name": "CmdLine",
"displayName": "CmdLine",
"enabled": true
}
]
}
Например, чтобы условно добавить задачу, только если она еще не существует:
- ${{ if not(containsValue(job.steps.*.task.id, 'f3ab91e7-bed6-436a-b651-399a66fe6c2a')) }}:
- script: echo conditionally inserted
Переменные
Кроме того, доступны переменные конвейера.
Например, если конвейер имел переменную myVar
, ее значение будет доступно декоратору как variables['myVar']
.
Например, чтобы дать декоратору отказ, мы могли бы искать переменную. Авторы конвейера, желающие отказаться от декоратора, могут задать эту переменную, и декоратор не внедряется. Если переменная отсутствует, то декоратор внедряется как обычно.
my-decorator.yml
- ${{ if ne(variables['skipInjecting'], 'true') }}:
- script: echo Injected the decorator
Затем в конвейере в организации автор может запросить декоратора не внедрять себя.
pipeline-with-opt-out.yml
variables:
skipInjecting: true
steps:
- script: echo This is the only step. No decorator is added.
Имена задач и идентификаторы GUID
Декораторы выполняются после того, как задачи уже превратились в графические идентификаторы. Рассмотрим следующий YAML:
steps:
- checkout: self
- bash: echo This is the Bash task
- task: PowerShell@2
inputs:
targetType: inline
script: Write-Host This is the PowerShell task
Каждый из этих шагов сопоставляется с задачей. Каждая задача имеет уникальный GUID. Имена задач и ключевое слово сопоставляются с идентификаторами GUID задач перед выполнением декораторов. Если декоратор хочет проверка для существования другой задачи, он должен выполнять поиск по GUID задачи, а не по имени или ключевое слово.
Для обычных задач (которые указываются с task
помощью ключевое слово), можно посмотреть на задачиtask.json
, чтобы определить его GUID.
Для специальных ключевое слово, как checkout
и bash
в предыдущем примере, можно использовать следующие идентификаторы GUID:
Ключевое слово | GUID | Имя задачи |
---|---|---|
checkout |
6D15AF64-176C-496D-B583-FD2AE21D4DF4 |
n/a, см. примечание |
bash |
6C731C3C-3C68-459A-A5C9-BDE6E6595B5B |
Bash |
script |
D9BAFED4-0B18-4F58-968D-86655B4D2CE9 |
CmdLine |
powershell |
E213FF0F-5D5C-4791-802D-52EA3E7BE1F1 |
PowerShell |
pwsh |
E213FF0F-5D5C-4791-802D-52EA3E7BE1F1 |
PowerShell |
publish |
ECDC45F6-832D-4AD9-B52B-EE49E94659BE |
PublishPipelineArtifact |
download |
30f35852-3f7e-4c0c-9a88-e127b4f97211 |
DownloadPipelineArtifact |
После разрешения имен задач и ключевое слово предыдущий YAML становится следующим:
steps:
- task: 6D15AF64-176C-496D-B583-FD2AE21D4DF4@1
inputs:
repository: self
- task: 6C731C3C-3C68-459A-A5C9-BDE6E6595B5B@3
inputs:
targetType: inline
script: echo This is the Bash task
- task: E213FF0F-5D5C-4791-802D-52EA3E7BE1F1@2
inputs:
targetType: inline
script: Write-Host This is the PowerShell task
Совет
Каждый из этих графических идентификаторов можно найти в task.json
поле для соответствующей задачи в поле.
Единственное исключение — это checkout
собственная возможность агента.
Его GUID встроен в службу и агент Azure Pipelines.