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.

  1. 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.
  2. 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-decoratorkell 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-tasksms.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.

Megjegyzé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.

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

Megjegyzé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.

Pipeline decorator running a simple script

Megjegyzé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 az alábbi példához hasonlóan módosíthatja a vss-extension.json jegyzékfájlt.

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@2létrehozhat egy másolatot a CmdLine@2 feladatról , és közzéteheti azt a dekorátorbővítménnyel.

Megjegyzé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 a 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-inputa .

Megjegyzé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.

View pipeline decorator context

Válassza ki a feladatot a naplók megtekintéséhez, amelyek futásidejű értékeket mutatnak, és hogy a környezet elérhető.