Folyamat dekorátorának létrehozása
Azure DevOps Services | Azure DevOps Server 2022
A folyamat dekorátorai lehetővé teszik a lépések hozzáadását minden feladat elejéhez és végéhez. A folyamatdekorátor létrehozásának folyamata eltér az egyetlen definícióhoz való lépések hozzáadásától, mivel az egy szervezet összes folyamatára vonatkozik.
Tegyük fel, hogy a szervezetnek vírusszkennert kell futtatnia az összes olyan buildkimeneten, amely kiadható. A folyamatkészítőknek nem kell emlékezni a lépés hozzáadására. Létrehozunk egy dekorátort, amely automatikusan injektálja a lépést. A folyamat dekorátora egy egyéni feladatot injektál, amely minden folyamatfeladat végén elvégzi a víruskeresést.
Tipp.
Tekintse meg a bővítményfejlesztéssel kapcsolatos legújabb dokumentációnkat az Azure DevOps Extension SDK használatával.
1. Hozzájárulások hozzáadása bővítményhez
Az alábbi példa feltételezi, hogy ismeri a hozzájárulási modelleket.
- Hozzon létre egy bővítményt.
A bővítmény létrehozása után már rendelkezik egy
vss-extension.json
fájllal. - Adjon hozzá hozzájárulásokat a fájlhoz az
vss-extension.json
új folyamat dekorátorához.
vss-extension.json
{
"manifestVersion": 1,
"contributions": [
{
"id": "my-required-task",
"type": "ms.azure-pipelines.pipeline-decorator",
"targets": [
"ms.azure-pipelines-agent-job.post-job-tasks"
],
"properties": {
"template": "my-decorator.yml"
}
}
],
"files": [
{
"path": "my-decorator.yml",
"addressable": true,
"contentType": "text/plain"
}
]
}
Hozzájárulási lehetőségek
Tekintsük át a tulajdonságokat és a használt tulajdonságokat:
Tulajdonság | Leírás |
---|---|
id |
Hozzájárulás azonosítója. A bővítményben szereplő hozzájárulások között egyedinek kell lennie. |
type |
Megadja, hogy ez a hozzájárulás egy folyamat dekorátora. A sztringnek ms.azure-pipelines.pipeline-decorator kell lennie. |
targets |
A dekorátorok a feladat/megadott tevékenység előtt, utána vagy mindkettő előtt futtathatók. Az elérhető lehetőségekért tekintse meg az alábbi táblázatot. |
properties.template |
(Kötelező) A sablon egy YAML-fájl a bővítményben, amely meghatározza a folyamat dekorátorának lépéseit. Ez egy relatív elérési út a bővítménymappa gyökerétől. |
properties.targettask |
A céltevékenység-azonosító, amelyet a célokhoz vagy célokhoz ms.azure-pipelines-agent-job.pre-task-tasks ms.azure-pipelines-agent-job.post-task-tasks használnak. GUID sztringnek kell lennie, mint 89b8ac58-8cb7-4479-a362-1baaacc6c7ad |
Targets
Cél | Leírás |
---|---|
ms.azure-pipelines-agent-job.pre-job-tasks |
Futtassa a klasszikus buildelési vagy YAML-folyamat egyéb feladatai előtt. A forráskód kivételének különbözőségei miatt ez a cél egy YAML-folyamat kivétele után, de a klasszikus buildelési folyamatban való kivétel előtt fut. |
ms.azure-pipelines-agent-job.post-checkout-tasks |
Futtassa az utolsó checkout feladatot egy klasszikus buildelési vagy YAML-folyamatban. |
ms.azure-pipelines-agent-job.post-job-tasks |
Futtassa az egyéb feladatokat egy klasszikus buildelési vagy YAML-folyamatban. |
ms.azure-pipelines-agent-job.pre-task-tasks |
Futtassa a megadott feladat előtt egy klasszikus build- vagy YAML-folyamatban. |
ms.azure-pipelines-agent-job.post-task-tasks |
Futtassa a megadott feladat után egy klasszikus buildelési vagy YAML-folyamatban. |
ms.azure-release-pipelines-agent-job.pre-task-tasks |
Futtassa a megadott feladat előtt egy klasszikus RM-folyamatban. |
ms.azure-release-pipelines-agent-job.post-task-tasks |
Futtassa a megadott feladat után egy klasszikus RM-folyamatban. |
ms.azure-release-pipelines-agent-job.pre-job-tasks |
Futtatás más feladatok előtt egy klasszikus RM-folyamatban. |
ms.azure-release-pipelines-agent-job.post-job-tasks |
Futtassa a többi feladatot egy klasszikus RM-folyamatban. |
Feljegyzés
A YAML-folyamatok üzembehelyezési feladatai csak támogatást és ms.azure-pipelines-agent-job.post-job-tasks
célokat támogatnakms.azure-pipelines-agent-job.pre-job-tasks
.
A feladatok támogatják az összes YAML-folyamatcélt.
Az üzembehelyezési feladatok nem támogatottak a klasszikus kiadási folyamatokban.
Ebben a példában azért használjuk ms.azure-pipelines-agent-job.post-job-tasks
, mert az összes buildelési feladat végén szeretnénk futni.
Ez a bővítmény hozzájárul egy folyamat dekorátorához. Ezután létrehozunk egy yaML-sablonfájlt a dekorátor viselkedésének meghatározásához.
2. Dekorátor YAML-fájl létrehozása
A bővítmény tulajdonságai között a "my-decorator.yml" nevet választottuk. Hozza létre ezt a fájlt a hozzájárulás gyökerében. Az egyes feladatok után futtatandó lépések készletét tartalmazza. Egy alapszintű példával kezdjük, és a teljes feladattal foglalkozunk.
my-decorator.yml (kezdeti verzió)
steps:
- task: CmdLine@2
displayName: 'Run my script (injected from decorator)'
inputs:
script: dir
Feljegyzés
A szolgáltatáskapcsolat-használattal rendelkező folyamatdetektáló feladatok nem támogatottak a klasszikus kiadási folyamatok esetében.
3. A dekorátor telepítése
A folyamat dekorátorának a szervezethez való hozzáadásához telepítenie kell egy bővítményt. Csak a privát bővítmények járulhatnak hozzá a folyamat dekorátoraihoz. A bővítményt a használat előtt meg kell adnia és meg kell osztania a szervezetével.
Miután megosztotta a bővítményt a szervezetével, keresse meg és telepítse a bővítményt .
Mentse a fájlt, majd hozza létre és telepítse a bővítményt.
Hozzon létre és futtasson egy alapszintű folyamatot.
A dekorátor minden feladat végén automatikusan injektálja a szkriptet dir
.
A folyamatfuttatás az alábbi példához hasonlóan néz ki.
Feljegyzés
A dekoratőr a szervezet minden folyamatának minden feladatán fut. A későbbi lépésekben logikát adunk hozzá a dekorátor futásának és működésének szabályozásához.
4. Injektálási feltételek
Példánkban csak akkor kell futtatni a vírusolvasót, ha a buildkimenetek nyilvánosan elérhetővé válhatnak. Tegyük fel, hogy a rendszer csak az alapértelmezett ágból (általában main
) származó buildeket bocsátja ki.
A dekorátort az alapértelmezett ágon futó feladatokra kell korlátozni.
A frissített fájl a következőképpen néz ki:
my-decorator.yml (módosított verzió)
steps:
- ${{ if eq(resources.repositories['self'].ref, resources.repositories['self'].defaultBranch) }}:
- script: dir
displayName: 'Run my script (injected from decorator)'
Ekkor láthatja ennek a bővíthetőségi pontnak a erejét. Az aktuális feladat környezetével feltételesen injektálhat lépéseket futásidőben. YAML-kifejezések használatával döntse el, hogy milyen lépéseket kell beadni és mikor. Az elérhető adatok teljes listájáért tekintse meg a folyamat dekorátorkifejezési környezetét .
Van egy másik feltétel, amelyet figyelembe kell vennünk: mi történik, ha a felhasználó már tartalmazta a víruskeresési lépést?
Nem szabad időt pazarolnunk arra, hogy újra futtassunk.
Ebben az egyszerű példában úgy teszünk, mintha a feladatban talált bármely script
feladat a vírusolvasót futtatja.
(Egy valós implementációban inkább egy egyéni feladatot kell ellenőriznie.)
A szkriptfeladat azonosítója.d9bafed4-0b18-4f58-968d-86655b4d2ce9
Ha egy másik szkriptfeladatot látunk, nem szabad beszúrni a miénket.
my-decorator.yml (végleges verzió)
steps:
- ${{ if and(eq(resources.repositories['self'].ref, resources.repositories['self'].defaultBranch), not(containsValue(job.steps.*.task.id, 'd9bafed4-0b18-4f58-968d-86655b4d2ce9'))) }}:
- script: dir
displayName: 'Run my script (injected from decorator)'
5. Célfeladat megadása
Megadhatja a céltevékenység azonosítóját, és beszúrhat tevékenységeket a céltevékenység előtt vagy után. A célfeladat megadásához módosíthatja vss-extension.json jegyzékfájlt az alábbi példához hasonlóan.
vss-extension.json
{
"contributions": [
{
"id": "my-required-task",
"type": "ms.azure-pipelines.pipeline-decorator",
"targets": [
"ms.azure-pipelines-agent-job.pre-task-tasks",
"ms.azure-pipelines-agent-job.post-task-tasks"
],
"properties": {
"template": "my-decorator.yml",
"targettask": "target-task-id"
}
}
],
...
}
A "targettask" tulajdonság beállításakor megadhatja a céltevékenység azonosítóját. A tevékenységek a megadott céltevékenység összes példánya előtt/után lesznek beszúrva.
Céltevékenység bemeneteinek megadása
Megadhatja annak a célfeladatnak a bemeneteit, amelyeket bemenetként szeretne beszúrni az injektált tevékenységbe.
Ez a funkció egyéni folyamatfeladatok elvégzésére lett kialakítva. Nem célja, hogy hozzáférést biztosítson a célfolyamat-tevékenységbemenetekhez folyamatváltozókon keresztül.
A célfolyamat tevékenységbemeneteihez (az előtaggal rendelkező target_
bemenetekhez) való hozzáféréshez az injektált folyamattevékenységnek az azure-pipelines-tasks-task-lib metódusait kell használnia, például a folyamatváltozókat const inputString = tl.getInput('target_targetInput')
nem.
Ehhez létrehozhatja saját egyéni folyamattevékenységét, és ott használhatja a célbemeneteket. Ha szüksége van az egyik beépített feladat funkciójára, például CmdLine@2
létrehozhat egy másolatot a CmdLine@2 feladatról , és közzéteheti azt a dekorátorbővítménnyel.
Feljegyzés
Ez a funkció csak a célfeladat előtt vagy után beszúrt tevékenységekhez érhető el.
A bemenetek listájának megadásához az alábbi példához hasonlóan módosíthatja vss-extension.json jegyzékfájlt.
vss-extension.json (injektált feladatbemenetek verziója)
{
"contributions": [
{
"id": "my-required-task",
"type": "ms.azure-pipelines.pipeline-decorator",
"targets": [
"ms.azure-pipelines-agent-job.pre-task-tasks",
"ms.azure-pipelines-agent-job.post-task-tasks"
],
"properties": {
"template": "my-decorator.yml",
"targettask": "target-task-id",
"targettaskinputs": ["target-task-input", "target-task-second-input"]
}
}
],
...
}
A "targettaskinputs" tulajdonság beállításával megadhatja az injektálandó bemenetek listáját.
Ezek a bemenetek a "target_
" előtaggal lesznek injektálva a feladatba, és az injektált feladatban, például target_target-task-input
a .
Feljegyzés
Azokat a céltevékenység-bemeneteket, amelyek titkos értékeket kapnak változókkal, vagy más tevékenységekből szerzik be őket, nem lesznek beszúrva.
Hibakeresés
Előfordulhat, hogy hibakeresésre van szükség a dekoratőr létrehozásakor. Azt is érdemes lehet megtekintenie, hogy milyen adatok érhetők el a környezetben.
A változót beállíthatja system.debugContext
a folyamat várólistára true
helyezésekor.
Ezután tekintse meg a folyamat összegzési oldalát.
A következő képhez hasonló kép jelenik meg.
Válassza ki a feladatot a naplók megtekintéséhez, amelyek futásidejű értékeket mutatnak, és hogy a környezet elérhető.