Dela via


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_repodet primära lagringsplatsens alias . I en YAML-pipeline kallas selfden 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 myVarskulle 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.