Sdílet prostřednictvím


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_repoprimá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.