Bagikan melalui


Konteks ekspresi dekorator alur

Azure DevOps

Dekorator alur memiliki akses ke konteks tentang alur tempat mereka berjalan. Sebagai penulis dekorator alur, Anda dapat menggunakan konteks ini untuk membuat keputusan tentang perilaku dekorator. Informasi yang tersedia dalam konteks berbeda untuk alur dan untuk rilis. Selain itu, dekorator berjalan setelah nama tugas diselesaikan untuk menugaskan pengidentifikasi unik global (GUID). Ketika dekorator Anda ingin mereferensikan tugas, dekorator harus menggunakan GUID daripada nama atau kata kunci.

Tip

Lihat dokumentasi terbaru kami tentang pengembangan ekstensi menggunakan Azure DevOps Extension SDK.

Sumber

Sumber daya alur tersedia pada resources objek.

Repositori

Saat ini, hanya ada satu kunci: repositories. repositories adalah peta dari ID repositori ke informasi tentang repositori.

Dalam build perancang, alias repo utama adalah __designer_repo. Dalam alur YAML, repositori utama disebut self. Dalam alur rilis, repositori tidak tersedia. Variabel artefak rilis tersedia.

Misalnya, untuk mencetak nama self repositori dalam alur YAML:

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

Repositori berisi properti ini:

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

Tugas

Detail pekerjaan tersedia pada job objek.

Data terlihat mirip dengan:

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

Misalnya, untuk menambahkan tugas secara kondisional hanya jika belum ada:

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

Variabel

Variabel alur juga tersedia.

Misalnya, jika alur memiliki variabel yang disebut myVar, nilainya akan tersedia untuk dekorator sebagai variables['myVar'].

Misalnya, untuk memberikan dekorator keikutsertaan, kita dapat mencari variabel. Penulis alur yang ingin menolak dekorator dapat mengatur variabel ini, dan dekorator tidak disuntikkan. Jika variabel tidak ada, maka dekorator disuntikkan seperti biasa.

my-decorator.yml

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

Kemudian, dalam alur di organisasi, penulis dapat meminta dekorator untuk tidak menyuntikkan dirinya sendiri.

pipeline-with-opt-out.yml

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

Nama tugas dan GUID

Dekorator berjalan setelah tugas sudah berubah menjadi GUID. Pertimbangkan YAML berikut:

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

Masing-masing langkah tersebut memetakan ke tugas. Setiap tugas memiliki GUID yang unik. Nama tugas dan kata kunci dipetakan ke GUID tugas sebelum dekorator berjalan. Jika dekorator ingin memeriksa keberadaan tugas lain, dekorator harus mencari berdasarkan GUID tugas daripada berdasarkan nama atau kata kunci.

Untuk tugas normal (yang Anda tentukan dengan task kata kunci), Anda dapat melihat tugas untuk menentukan GUID-nya task.json . Untuk kata kunci khusus seperti checkout dan bash dalam contoh sebelumnya, Anda dapat menggunakan GUID berikut:

Kata kunci GUID Nama tugas
checkout 6D15AF64-176C-496D-B583-FD2AE21D4DF4 n/a, lihat catatan
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

Setelah nama tugas dan kata kunci diselesaikan, YAML sebelumnya menjadi:

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

Anda dapat menemukan masing-masing GUID ini dalam task.json untuk tugas dalam kotak yang sesuai. Satu-satunya pengecualian adalah checkout, yang merupakan kemampuan asli agen. GUID-nya dibangun ke dalam layanan dan agen Azure Pipelines.