İşlem hattı dekoratörü ifade bağlamı

Azure DevOps Services

İşlem hattı dekoratörleri , çalıştırdıkları işlem hattıyla ilgili bağlama erişebilir. İşlem hattı dekoratörü yazarı olarak, dekoratörün davranışı hakkında kararlar almak için bu bağlamı kullanabilirsiniz. Bağlam içinde sağlanan bilgiler işlem hatları ve yayın için farklıdır. Ayrıca, görev adları genel olarak benzersiz tanımlayıcılara (GUID) çözümlendikten sonra dekoratörler çalışır. Dekoratörünüzün bir göreve başvurmak istemesi, ad veya anahtar sözcük yerine GUID'yi kullanması gerekir.

İpucu

Azure DevOps Uzantı SDK'sını kullanarak uzantı geliştirmeyle ilgili en yeni belgelerimize göz atın.

Kaynaklar

nesnesinde resources işlem hattı kaynakları kullanılabilir.

Depolar

Şu anda tek bir anahtar vardır: repositories. repositories , depo kimliğinden depo hakkındaki bilgilere bir haritadır.

Tasarımcı derlemesinde birincil depo diğer adıdır __designer_repo. YAML işlem hattında birincil depo olarak adlandırılır self. Yayın işlem hattında depolar kullanılamaz. Yayın yapıt değişkenleri kullanılabilir.

Örneğin, YAML işlem hattındaki self deponun adını yazdırmak için:

steps:
- script: echo ${{ resources.repositories['self'].name }}

Depolar şu özellikleri içerir:

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": {}
}

İş

İş ayrıntıları nesnede job kullanılabilir.

Veriler şuna benzer:

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
		}
	]
}

Örneğin, yalnızca önceden mevcut olmayan bir görevi koşullu olarak eklemek için:

- ${{ if not(containsValue(job.steps.*.task.id, 'f3ab91e7-bed6-436a-b651-399a66fe6c2a')) }}:
  - script: echo conditionally inserted

Değişkenler

İşlem hattı değişkenleri de kullanılabilir.

Örneğin, işlem hattının adlı myVarbir değişkeni varsa değeri dekoratör tarafından olarak variables['myVar']kullanılabilir.

Örneğin, bir dekoratöre geri çevirme vermek için bir değişken arayabiliriz. Dekoratörden çıkmak isteyen işlem hattı yazarları bu değişkeni ayarlayabilir ve dekoratör eklemez. Değişken mevcut değilse dekoratör her zamanki gibi eklenir.

my-decorator.yml

- ${{ if ne(variables['skipInjecting'], 'true') }}:
  - script: echo Injected the decorator

Ardından, kuruluştaki bir işlem hattında yazar dekoratörden kendisini eklememesini isteyebilir.

pipeline-with-opt-out.yml

variables:
  skipInjecting: true
steps:
- script: echo This is the only step. No decorator is added.

Görev adları ve GUID'ler

Dekoratörler, görevler zaten GUID'lere dönüştürüldükten sonra çalışır. Aşağıdaki YAML'yi göz önünde bulundurun:

steps:
- checkout: self
- bash: echo This is the Bash task
- task: PowerShell@2
  inputs:
    targetType: inline
    script: Write-Host This is the PowerShell task

Bu adımların her biri bir göreve eşler. Her görevin benzersiz bir GUID'i vardır. Görev adları ve anahtar sözcükler, dekoratörler çalışmadan önce görev GUID'leriyle eşler. Dekoratör başka bir görevin varlığını denetlemek istiyorsa, ad veya anahtar sözcük yerine görev GUID'sine göre arama yapmalıdır.

Normal görevler için (anahtar sözcüğüyle task belirttiğiniz), GUID değerini belirlemek için görevin görevlerine task.json bakabilirsiniz. Önceki örnekte ve bash gibi checkout özel anahtar sözcükler için aşağıdaki GUID'leri kullanabilirsiniz:

Anahtar sözcük GUID Görev Adı
checkout 6D15AF64-176C-496D-B583-FD2AE21D4DF4 yok, nota bakın
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

Görev adları ve anahtar sözcükler çözümlendikten sonra, önceki YAML şöyle olur:

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

İpucu

Bu GUID'lerin task.json her birini ilgili kutu içi görevin içinde bulabilirsiniz. Tek özel durum, checkoutaracının yerel bir özelliği olan 'dir. GUID'i Azure Pipelines hizmetinde ve aracıda yerleşik olarak bulunur.