Kontext výrazu dekorátoru kanálu
Služby Azure DevOps
Dekorátory kanálu mají přístup k kontextu kanálu, ve kterém běží. Jako autor dekorátoru kanálu můžete tento kontext použít k rozhodování o chování dekorátora. Informace, které jsou k dispozici v kontextu, se liší pro kanály a pro vydání. Dekorátory se také spustí po překladu názvů úkolů na globálně jedinečné identifikátory (GUID). Pokud dekorátor chce odkazovat na úkol, měl by místo názvu nebo klíčového slova použít identifikátor GUID.
Tip
Projděte si nejnovější dokumentaci k vývoji rozšíření pomocí sady SDK rozšíření Azure DevOps.
Poznámka:
Při vytváření webových rozšíření se používají dekorátory kanálů. Tyto příklady nejsou navržené tak, aby fungovaly v kanálech YAML.
Zdroje informací
Prostředky kanálu jsou k dispozici v objektu resources
.
Úložiště
V současné době existuje jenom jeden klíč: repositories
.
repositories
je mapa z ID úložiště na informace o úložišti.
V sestavení návrháře je __designer_repo
primární alias úložiště .
V kanálu YAML se primární úložiště nazývá self
.
V kanálu verze nejsou úložiště dostupná.
K dispozici jsou proměnné artefaktů vydané verze.
Pokud chcete například vytisknout název self
úložiště v kanálu YAML:
steps:
- script: echo ${{ resources.repositories['self'].name }}
Úložiště obsahují tyto vlastnosti:
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": {}
}
Úloha
Podrobnosti o úloze jsou k dispozici v objektu job
.
Data vypadají nějak takto:
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
}
]
}
Pokud například chcete podmíněně přidat úlohu jenom v případě, že ještě neexistuje:
- ${{ if not(containsValue(job.steps.*.task.id, 'f3ab91e7-bed6-436a-b651-399a66fe6c2a')) }}:
- script: echo conditionally inserted
Proměnné
K dispozici jsou také proměnné kanálu.
Pokud by například kanál měl proměnnou s názvem myVar
, její hodnota by byla k dispozici dekorátoru jako variables['myVar']
.
Pokud například chcete dekorátorovi poskytnout výslovný nesouhlas, mohli bychom vyhledat proměnnou. Autoři kanálu, kteří chtějí decorator zrušit, můžou tuto proměnnou nastavit a dekorátor se nevkládá. Pokud proměnná není k dispozici, pak se dekorátor vloží obvyklým způsobem.
my-decorator.yml
- ${{ if ne(variables['skipInjecting'], 'true') }}:
- script: echo Injected the decorator
V kanálu v organizaci pak může autor požádat dekorátora, aby se nevkládl sám.
pipeline-with-opt-out.yml
variables:
skipInjecting: true
steps:
- script: echo This is the only step. No decorator is added.
Názvy úkolů a identifikátory GUID
Dekorátory se spouštějí po tom, co se úkoly už změnily na identifikátory GUID. Zvažte následující 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
Každý z těchto kroků se mapuje na úkol. Každý úkol má jedinečný identifikátor GUID. Názvy úkolů a klíčová slova se před spuštěním dekorátorů mapují na identifikátory GUID úkolů. Pokud dekorátor chce zkontrolovat existenci jiného úkolu, musí hledat podle identifikátoru GUID úkolu, nikoli podle názvu nebo klíčového slova.
U normálních úkolů (které zadáte pomocí klíčového task
slova) můžete zjistit identifikátor GUID úkolu task.json
.
Pro speciální klíčová slova jako checkout
a bash
v předchozím příkladu můžete použít následující identifikátory GUID:
Klíčové slovo | Identifikátor GUID | Název úlohy |
---|---|---|
checkout |
6D15AF64-176C-496D-B583-FD2AE21D4DF4 |
n/a, viz poznámka |
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 |
Jakmile se názvy úkolů a klíčová slova přeloží, stane se předchozí 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
Tip
Každý z těchto identifikátorů GUID najdete v task.json
příslušném úkolu v poli.
Jedinou výjimkou je checkout
, což je nativní funkce agenta.
Jeho identifikátor GUID je integrovaný do služby a agenta Azure Pipelines.