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.