Kontext för pipelinedekoratöruttryck
Azure DevOps Services
Pipelinedekoratörer har åtkomst till kontexten om pipelinen där de körs. Som pipelinedekoratörsförfattare kan du använda den här kontexten för att fatta beslut om dekoratörens beteende. Den information som är tillgänglig i kontexten skiljer sig åt för pipelines och för lansering. Dessutom körs dekoratörer efter att uppgiftsnamn har matchats till aktivitets globalt unika identifierare (GUID). När din dekoratör vill referera till en uppgift bör den använda GUID i stället för namnet eller nyckelordet.
Dricks
Läs vår senaste dokumentation om tilläggsutveckling med hjälp av Azure DevOps Extension SDK.
Kommentar
Pipelinedekoratörer används när du skapar webbtillägg. De här exemplen är inte utformade för att fungera i YAML-pipelines.
Resurser
Pipelineresurser är tillgängliga för resources
objektet.
Centrallager
För närvarande finns det bara en nyckel: repositories
.
repositories
är en karta från lagringsplatsens ID till information om lagringsplatsen.
I en designerversion är __designer_repo
det primära lagringsplatsens alias .
I en YAML-pipeline kallas self
den primära lagringsplatsen .
I en versionspipeline är lagringsplatser inte tillgängliga.
Versionsartefaktvariabler är tillgängliga.
Om du till exempel vill skriva ut namnet på self
lagringsplatsen i en YAML-pipeline:
steps:
- script: echo ${{ resources.repositories['self'].name }}
Lagringsplatser innehåller följande egenskaper:
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": {}
}
Projekt
Jobbinformation finns på job
objektet.
Data ser ut ungefär så här:
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
}
]
}
Om du till exempel bara vill lägga till en aktivitet villkorligt om den inte redan finns:
- ${{ if not(containsValue(job.steps.*.task.id, 'f3ab91e7-bed6-436a-b651-399a66fe6c2a')) }}:
- script: echo conditionally inserted
Variabler
Pipelinevariabler är också tillgängliga.
Om pipelinen till exempel hade en variabel med namnet myVar
skulle dess värde vara tillgängligt för dekoratören som variables['myVar']
.
För att till exempel ge en dekoratör en opt-out kan vi leta efter en variabel. Pipelineförfattare som vill välja bort dekoratören kan ange den här variabeln och dekoratören matas inte in. Om variabeln inte finns matas dekoratören in som vanligt.
my-decorator.yml
- ${{ if ne(variables['skipInjecting'], 'true') }}:
- script: echo Injected the decorator
I en pipeline i organisationen kan författaren sedan begära att dekoratören inte matar in sig själv.
pipeline-with-opt-out.yml
variables:
skipInjecting: true
steps:
- script: echo This is the only step. No decorator is added.
Uppgiftsnamn och GUID:er
Dekoratörer körs efter att uppgifter redan har omvandlats till GUID. Överväg följande 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
Vart och ett av dessa steg mappar till en uppgift. Varje uppgift har ett unikt GUID. Aktivitetsnamn och nyckelord mappas till aktivitets-GUID innan dekoratörer körs. Om en dekoratör vill söka efter en annan aktivitet måste den söka efter aktivitets-GUID i stället för efter namn eller nyckelord.
För normala uppgifter (som du anger med nyckelordet task
) kan du titta på aktivitetens task.json
för att fastställa dess GUID.
För särskilda nyckelord som checkout
och bash
i föregående exempel kan du använda följande GUID:
Nyckelord | GUID | Uppgiftsnamn |
---|---|---|
checkout |
6D15AF64-176C-496D-B583-FD2AE21D4DF4 |
n/a, se anteckning |
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 |
Ladda nedPipelineArtifact |
När aktivitetsnamnen och nyckelorden har lösts blir den tidigare 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
Dricks
Du hittar var och en av dessa GUID:er i task.json
för motsvarande in-box-uppgift.
Det enda undantaget är checkout
, som är en intern funktion för agenten.
Dess GUID är inbyggt i Tjänsten och agenten för Azure Pipelines.