Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022 | Azure DevOps Server 2020
Ez az útmutató bemutatja, hogyan hozhat létre, tesztelhet és tehet közzé egyéni buildelési vagy kiadási feladatokat Azure DevOps-bővítményekként. Az egyéni folyamatfeladatok lehetővé teszik az Azure DevOps kiterjesztését a csapat munkafolyamataihoz szabott speciális funkciókkal, az egyszerű segédprogramoktól a külső rendszerekkel való összetett integrációig.
Ismerje meg, hogyan végezheti el a következő feladatokat:
- A fejlesztési környezet és a projektstruktúra beállítása
- Feladatlogika létrehozása a TypeScript és az Azure Pipelines feladattár használatával
- Átfogó egységtesztelés megvalósítása makett-keretrendszerekkel
- A bővítmény csomagolása terjesztési célokra
- Közzététel a Visual Studio Marketplace-en
- Automatizált CI/CD-folyamatok beállítása bővítménykarbantartáshoz
További információ az Azure Pipelinesról: Mi az Az Azure Pipelines?
Megjegyzés
Ez a cikk az ügynökalapú bővítmények ügynöktevékenységeit ismerteti. A kiszolgálói feladatokkal és a kiszolgálóalapú bővítményekkel kapcsolatos információkért lásd: Kiszolgálói feladat létrehozása.
Előfeltételek
Mielőtt hozzákezdene, győződjön meg arról, hogy a következő követelmények teljesülnek:
| Összetevő | Követelmény | Leírás |
|---|---|---|
| Azure DevOps-szervezet | Kötelező | Szervezet létrehozása , ha nem rendelkezik ilyen szervezettel |
| Szövegszerkesztő | Ajánlott | Visual Studio Code for IntelliSense és hibakeresési támogatás |
| Node.js | Kötelező | Telepítse a legújabb verziót (Node.js 20 vagy újabb verzió ajánlott) |
| TypeScript fordító | Kötelező | Telepítse a legújabb verziót (4.6.3-os vagy újabb verzió) |
| Azure DevOps CLI (tfx-cli) | Kötelező | Telepítés bővítmények csomagolásával npm i -g tfx-cli |
| Azure DevOps Extension SDK | Kötelező | Az azure-devops-extension-sdk csomag telepítése |
| Tesztelési keretrendszer | Kötelező | Mocha egységteszteléshez (telepítés közben telepítve) |
Projektstruktúra
Hozzon létre egy home könyvtárat a projekthez. Az oktatóanyag elvégzése után a bővítménynek a következő struktúrával kell rendelkeznie:
|--- README.md
|--- images
|--- extension-icon.png
|--- buildandreleasetask // Task scripts location
|--- task.json // Task definition
|--- index.ts // Main task logic
|--- package.json // Node.js dependencies
|--- tests/ // Unit tests
|--- _suite.ts
|--- success.ts
|--- failure.ts
|--- vss-extension.json // Extension manifest
Fontos
A fejlesztési gépnek a Node.jslegújabb verzióját kell futtatnia az éles környezettel való kompatibilitás biztosításához. Frissítse a fájlt a task.json Node 20 használatára:
"execution": {
"Node20_1": {
"target": "index.js"
}
}
1. Egyéni feladat létrehozása
Ez a szakasz végigvezeti az egyéni feladat alapszintű szerkezetének és implementálásának létrehozásán. Az ebben a lépésben szereplő összes fájlt a buildandreleasetask projekt könyvtárában home lévő mappában kell létrehozni.
Megjegyzés
Ez az útmutató a Windowst és a PowerShellt használja. A lépések minden platformon működnek, de a környezeti változó szintaxisa eltér. Macen vagy Linuxon cserélje le a .$env:<var>=<val>export <var>=<val>
A feladat-állványzat beállítása
Hozza létre az alapvető projektstruktúrát, és telepítse a szükséges függőségeket:
A Node.js projekt inicializálásához nyissa meg a PowerShellt, nyissa meg a
buildandreleasetaskmappát, és futtassa a következőt:npm init --yesA
package.jsonfájl az alapértelmezett beállításokkal jön létre. A--yesjelölő automatikusan elfogadja az összes alapértelmezett beállítást.Tipp
Az Azure Pipelines-ügynökök elvárják, hogy a feladatmappák csomópontmodulokat is tartalmazzanak. Másolás
node_modulesabuildandreleasetaskmappába. A VSIX-fájlméret (50 MB-os korlát) kezeléséhez fontolja meg a futtatásnpm install --productionvagynpm prune --productiona csomagolás előtt.Telepítse az Azure Pipelines-feladattárat:
npm install azure-pipelines-task-lib --saveTypeScript-típusdefiníciók telepítése:
npm install @types/node --save-dev npm install @types/q --save-devVerziókövetési kizárások beállítása
echo node_modules > .gitignoreA buildelési folyamatnak minden alkalommal újra kell futnia
npm installa node_modules újraépítéséhez.Tesztelési függőségek telepítése:
npm install mocha --save-dev -g npm install sync-request --save-dev npm install @types/mocha --save-devTelepítse a TypeScript-fordítót:
npm install typescript@4.6.3 -g --save-devMegjegyzés
Telepítse a TypeScriptet globálisan, hogy a
tscparancs elérhető legyen. Nélküle a TypeScript 2.3.4 alapértelmezés szerint használható.TypeScript-fordítás konfigurálása:
tsc --init --target es2022A
tsconfig.jsonfájl es2022-es célbeállításokkal jön létre.
A feladatlogika implementálása
Az állványzatok elkészültével hozza létre a funkciókat és metaadatokat meghatározó alapvető feladatfájlokat:
Hozza létre a feladatdefiníciós fájlt: Létrehozás
task.jsonabuildandreleasetaskmappában. Ez a fájl ismerteti a feladatot az Azure Pipelines-rendszerben, meghatározva a bemeneteket, a végrehajtási beállításokat és a felhasználói felületi bemutatót.{ "$schema": "https://raw.githubusercontent.com/Microsoft/azure-pipelines-task-lib/master/tasks.schema.json", "id": "{{taskguid}}", "name": "{{taskname}}", "friendlyName": "{{taskfriendlyname}}", "description": "{{taskdescription}}", "helpMarkDown": "", "category": "Utility", "author": "{{taskauthor}}", "version": { "Major": 0, "Minor": 1, "Patch": 0 }, "instanceNameFormat": "Echo $(samplestring)", "inputs": [ { "name": "samplestring", "type": "string", "label": "Sample String", "defaultValue": "", "required": true, "helpMarkDown": "A sample string" } ], "execution": { "Node20_1": { "target": "index.js" } } }Megjegyzés
Cserélje le
{{placeholders}}a tevékenység tényleges adataira. Ennektaskguidegyedinek kell lennie. Hozzon létre egyet a PowerShell használatával:(New-Guid).GuidA feladatlogika implementálásához hozza létre
index.tsa tevékenység fő funkcióit:import tl = require('azure-pipelines-task-lib/task'); async function run() { try { const inputString: string | undefined = tl.getInput('samplestring', true); if (inputString == 'bad') { tl.setResult(tl.TaskResult.Failed, 'Bad input was given'); return; } console.log('Hello', inputString); } catch (err: any) { tl.setResult(tl.TaskResult.Failed, err.message); } } run();TypeScript fordítása JavaScriptre:
tscA
index.jsfájl a TypeScript-forrásból jön létre.
Az task.json összetevők ismertetése
A task.json fájl a feladatdefiníció középpontjában áll. A legfontosabb tulajdonságok a következők:
| Tulajdonság | Leírás | példa |
|---|---|---|
id |
A tevékenység egyedi GUID-azonosítója | Létrehozva a következő használatával: (New-Guid).Guid |
name |
Tevékenység neve szóközök nélkül (belsőleg használva) | MyCustomTask |
friendlyName |
Megjelenítendő név a felhasználói felületen | My Custom Task |
description |
A feladat funkcióinak részletes leírása | Performs custom operations on files |
author |
Közzétevő vagy szerző neve | My Company |
instanceNameFormat |
A feladat megjelenése a folyamat lépéseiben | Process $(inputFile) |
inputs |
Bemeneti paraméterek tömbje | Lásd a következő bemeneti típusokat |
execution |
Végrehajtási környezet specifikációja |
Node20_1, stb PowerShell3. |
restrictions |
Parancsok és változók biztonsági korlátozásai | Új feladatokhoz ajánlott |
Biztonsági korlátozások
Éles feladatok esetén adjon hozzá biztonsági korlátozásokat a parancsok használatának és a változók elérésének korlátozásához:
"restrictions": {
"commands": {
"mode": "restricted"
},
"settableVariables": {
"allowed": ["variable1", "test*"]
}
}
A korlátozott mód csak az alábbi parancsokat engedélyezi:
-
logdetail,logissue,completesetprogress -
setsecret,setvariable,debugsettaskvariable -
prependpath,publish
A változók engedélyezési listája szabályozza, hogy mely változók állíthatók be a vagy a setvariableprependpath. Támogatja az alapszintű regex-mintákat.
Megjegyzés
Ehhez a funkcióhoz az ügynök 2.182.1-es vagy újabb verziója szükséges.
Bemeneti típusok és példák
A tevékenységparaméterek gyakori bemeneti típusai:
"inputs": [
{
"name": "stringInput",
"type": "string",
"label": "Text Input",
"defaultValue": "",
"required": true,
"helpMarkDown": "Enter a text value"
},
{
"name": "boolInput",
"type": "boolean",
"label": "Enable Feature",
"defaultValue": "false",
"required": false
},
{
"name": "picklistInput",
"type": "pickList",
"label": "Select Option",
"options": {
"option1": "First Option",
"option2": "Second Option"
},
"defaultValue": "option1"
},
{
"name": "fileInput",
"type": "filePath",
"label": "Input File",
"required": true,
"helpMarkDown": "Path to the input file"
}
]
A feladat helyi tesztelése
A csomagolás előtt tesztelje a feladatot, hogy megfelelően működjön:
Hiányzó bemenettel végzett tesztelés (sikertelennek kell lennie):
node index.jsVárt kimenet:
##vso[task.debug]agent.workFolder=undefined ##vso[task.debug]loading inputs and endpoints ##vso[task.debug]loaded 0 ##vso[task.debug]task result: Failed ##vso[task.issue type=error;]Input required: samplestring ##vso[task.complete result=Failed;]Input required: samplestringÉrvényes bemenettel végzett tesztelés (sikeresnek kell lennie):
$env:INPUT_SAMPLESTRING="World" node index.jsVárt kimenet:
##vso[task.debug]agent.workFolder=undefined ##vso[task.debug]loading inputs and endpoints ##vso[task.debug]loading INPUT_SAMPLESTRING ##vso[task.debug]loaded 1 ##vso[task.debug]samplestring=World Hello WorldHibakezelés tesztelése:
$env:INPUT_SAMPLESTRING="bad" node index.jsEnnek a műveletnek aktiválnia kell a hibakezelési útvonalat a kódban.
Tipp
A feladatfuttatókkal és Node.js verziókkal kapcsolatos információkért tekintse meg a Csomópontfuttató frissítési útmutatóját.
További információkért tekintse meg a buildelési/kiadási feladatra vonatkozó referenciát.
2. Átfogó egységtesztelés megvalósítása
A feladat alapos tesztelése biztosítja a megbízhatóságot, és segít a problémák megoldásában az éles folyamatokba való üzembe helyezés előtt.
Tesztelési függőségek telepítése
Telepítse a szükséges tesztelési eszközöket:
npm install mocha --save-dev -g
npm install sync-request --save-dev
npm install @types/mocha --save-dev
Teszt létrehozása
Hozzon létre egy
testsfájlt tartalmazó_suite.tsmappát a feladatkönyvtárban:import * as path from 'path'; import * as assert from 'assert'; import * as ttm from 'azure-pipelines-task-lib/mock-test'; describe('Sample task tests', function () { before( function() { // Setup before tests }); after(() => { // Cleanup after tests }); it('should succeed with simple inputs', function(done: Mocha.Done) { // Success test implementation }); it('should fail if tool returns 1', function(done: Mocha.Done) { // Failure test implementation }); });Tipp
A tesztmappának a feladatmappában kell lennie (például
buildandreleasetask). Ha szinkronizálási kérési hibát tapasztal, telepítse a következő feladatmappába:npm i --save-dev sync-request.A sikeres feladatvégrehajtás szimulálásához hozzon létre
success.tsa tesztkönyvtárban:import ma = require('azure-pipelines-task-lib/mock-answer'); import tmrm = require('azure-pipelines-task-lib/mock-run'); import path = require('path'); let taskPath = path.join(__dirname, '..', 'index.js'); let tmr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); // Set valid input for success scenario tmr.setInput('samplestring', 'human'); tmr.run();Adja hozzá a sikerességi tesztet a
_suite.tsfájlhoz:it('should succeed with simple inputs', function(done: Mocha.Done) { this.timeout(1000); let tp: string = path.join(__dirname, 'success.js'); let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); tr.runAsync().then(() => { console.log(tr.succeeded); assert.equal(tr.succeeded, true, 'should have succeeded'); assert.equal(tr.warningIssues.length, 0, "should have no warnings"); assert.equal(tr.errorIssues.length, 0, "should have no errors"); console.log(tr.stdout); assert.equal(tr.stdout.indexOf('Hello human') >= 0, true, "should display Hello human"); done(); }).catch((error) => { done(error); // Ensure the test case fails if there's an error }); });Hozzon létre
failure.tsa tesztkönyvtárban a hibakezelés teszteléséhez:import ma = require('azure-pipelines-task-lib/mock-answer'); import tmrm = require('azure-pipelines-task-lib/mock-run'); import path = require('path'); let taskPath = path.join(__dirname, '..', 'index.js'); let tmr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); // Set invalid input to trigger failure tmr.setInput('samplestring', 'bad'); tmr.run();Adja hozzá a hibatesztet a
_suite.tsfájlhoz:it('should fail if tool returns 1', function(done: Mocha.Done) { this.timeout(1000); const tp = path.join(__dirname, 'failure.js'); const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); tr.runAsync().then(() => { console.log(tr.succeeded); assert.equal(tr.succeeded, false, 'should have failed'); assert.equal(tr.warningIssues.length, 0, 'should have no warnings'); assert.equal(tr.errorIssues.length, 1, 'should have 1 error issue'); assert.equal(tr.errorIssues[0], 'Bad input was given', 'error issue output'); assert.equal(tr.stdout.indexOf('Hello bad'), -1, 'Should not display Hello bad'); done(); }); });
A tesztek futtatása
Hajtsa végre a tesztcsomagot:
# Compile TypeScript
tsc
# Run tests
mocha tests/_suite.js
Mindkét tesztnek át kell mennie. Részletes kimenet esetén (a konzolkimenethez hasonlóan) állítsa be a nyomkövetési környezeti változót:
$env:TASK_TEST_TRACE=1
mocha tests/_suite.js
A lefedettséggel kapcsolatos ajánlott eljárások tesztelése
- Az összes bemeneti kombináció tesztelése: Érvényes bemenetek, érvénytelen bemenetek, hiányzó szükséges bemenetek
- Tesztelési hibaforgatókönyvek: Hálózati hibák, fájlrendszerhibák, engedélyproblémák
- Külső függőségek ki makettje: Ne támaszkodjanak külső szolgáltatásokra az egységtesztekben
- Kimenetek ellenőrzése: Ellenőrizze a konzol kimenetét, a tevékenység eredményeit és a létrehozott összetevőket
- Teljesítménytesztelés: Fontolja meg a nagyméretű fájlokat feldolgozó feladatok tesztjeinek hozzáadását
Ajánlott biztonsági eljárások
- Bemenet ellenőrzése: A bemenetek ellenőrzése és megtisztítása
-
Titkos kódok kezelése: Bizalmas adatokhoz használható
setSecret - Parancskorlátozások: Parancskorlátozások implementálása éles tevékenységekhez
- Minimális engedélyek: Csak a szükséges engedélyek kérése
- Rendszeres frissítések: Függőségek és Node.js verziók naprakészen tartása
A feladat helyi tesztelése és az átfogó egységtesztek implementálása után csomagolja be az Azure DevOps bővítményébe.
Csomagolóeszközök telepítése
Telepítse a platformfüggetlen parancssori felületet (tfx-cli):
npm install -g tfx-cli
A bővítményjegyzék létrehozása
A bővítményjegyzék (vss-extension.json) tartalmazza a bővítményre vonatkozó összes információt, beleértve a feladatmappákra és a rendszerképekre mutató hivatkozásokat is.
Képmappa létrehozása fájllal
extension-icon.pngLétrehozás
vss-extension.jsona bővítmény gyökérkönyvtárában (nem a feladatmappában):{ "manifestVersion": 1, "id": "my-custom-tasks", "name": "My Custom Tasks", "version": "1.0.0", "publisher": "your-publisher-id", "targets": [ { "id": "Microsoft.VisualStudio.Services" } ], "description": "Custom build and release tasks for Azure DevOps", "categories": [ "Azure Pipelines" ], "icons": { "default": "images/extension-icon.png" }, "files": [ { "path": "MyCustomTask" } ], "contributions": [ { "id": "my-custom-task", "type": "ms.vss-distributed-task.task", "targets": [ "ms.vss-distributed-task.tasks" ], "properties": { "name": "MyCustomTask" } } ] }
Kulcsjegyzék tulajdonságai
| Tulajdonság | Leírás |
|---|---|
publisher |
A marketplace-közzétevő azonosítója |
contributions.id |
Egyedi azonosító a bővítményen belül |
contributions.properties.name |
Meg kell egyeznie a feladatmappa nevével |
files.path |
A tevékenységmappa elérési útja a jegyzékhez képest |
Megjegyzés
Módosítsa a közzétevő értékét a közzétevő nevére. A közzétevő létrehozásáról további információt a Közzétevő létrehozása című témakörben talál.
Csomagold a bővítményt
Csomagolja be a bővítményt egy .vsix-fájlba:
tfx extension create --manifest-globs vss-extension.json
Verziókezelés
-
Bővítményverzió: Az egyes frissítések verziószámának
vss-extension.jsonnövelése -
Feladat verziója: Az egyes tevékenységfrissítések
task.jsonverziószámának növelése -
Automatikus növekmény: A
--rev-versionjavítás verziójának automatikus növelése
tfx extension create --manifest-globs vss-extension.json --rev-version
Fontos
A feladatverziót és a bővítményverziót is frissíteni kell ahhoz, hogy a módosítások érvénybe lépjenek az Azure DevOpsban.
Verziószámozási stratégia
Kövesse a feladatfrissítések szemantikai verziószámozási alapelveit:
- Főverzió: A bemenetek/kimenetek kompatibilitástörő változásai
- Alverzió: Új funkciók, visszamenőlegesen kompatibilis
- Javítás verziója: Csak hibajavítások
Frissítési folyamat:
- Verzió frissítése
task.json - Verzió frissítése
vss-extension.json - Tesztelés alaposan egy tesztszervezetben
- Problémák közzététele és figyelése
Közzététel a Visual Studio Marketplace-en
1. A közzétevő létrehozása
- Bejelentkezés a Visual Studio Marketplace közzétételi portálra
- Ha a rendszer kéri, hozzon létre egy új közzétevőt:
-
Közzétevő azonosítója: A bővítményjegyzékben használatos (például
mycompany-myteam) -
Megjelenítendő név: A piactéren megjelenített nyilvános név (például
My Team)
-
Közzétevő azonosítója: A bővítményjegyzékben használatos (például
- Tekintse át és fogadja el a Marketplace Közzétevői Szerződését
2. Töltse fel a bővítményt
Webes felület metódusa:
- Válassza az Új bővítmény feltöltése lehetőséget
- A csomagolt
.vsixfájl kiválasztása - Válassza a Feltöltés lehetőséget
Parancssori módszer:
tfx extension publish --manifest-globs vss-extension.json --share-with yourOrganization
3. A bővítmény megosztása
- Kattintson a jobb gombbal a bővítményre a piactéren
- Válassza a Megosztás lehetőséget
- Adja meg a szervezet nevét
- Szükség szerint további szervezetek hozzáadása
Fontos
A közzétevőket ellenőrizni kell a bővítmények nyilvános megosztásához. További információ: Csomag/Közzététel/Telepítés.
4. Telepítés a szervezeten
A megosztás után telepítse a bővítményt az Azure DevOps-szervezetre:
- Ugrás a Szervezeti beállítások>bővítményekre
- A bővítmény megkeresése
- Válassza a Get it free and install (Ingyenes lekérése és telepítése) lehetőséget
3. A bővítmény csomagolása és közzététele
A bővítmény ellenőrzése
A telepítés után ellenőrizze, hogy a feladat megfelelően működik-e:
- Folyamat létrehozása vagy szerkesztése.
- Adja hozzá az egyéni feladatot:
- Válassza a Feladat hozzáadása lehetőséget a folyamatszerkesztőben
- Egyéni feladat megkeresése név szerint
- Hozzáadás a folyamathoz
- Feladatparaméterek konfigurálása:
- A szükséges bemenetek beállítása
- Opcionális beállítások konfigurálása
- A folyamat futtatása a funkciók teszteléséhez
- Végrehajtás figyelése:
- A feladatnaplók megfelelő végrehajtásának ellenőrzése
- Várt kimenetek ellenőrzése
- Győződjön meg arról, hogy nincsenek hibák vagy figyelmeztetések
4. Bővítmény-közzététel automatizálása CI/CD-vel
Az egyéni feladat hatékony fenntartása érdekében hozzon létre automatizált buildelési és kiadási folyamatokat, amelyek a tesztelést, a csomagolást és a közzétételt kezelik.
Az automatizálás előfeltételei
- Azure DevOps-bővítményfeladatok: A bővítmény ingyenes telepítése
-
Változócsoport: Hozzon létre egy folyamattár változócsoportot az alábbi változókkal:
-
publisherId: A piactér közzétevő-azonosítója -
extensionId: Bővítményazonosító a vss-extension.json -
extensionName: Bővítmény neve vss-extension.json -
artifactName: A VSIX-összetevő neve
-
- Szolgáltatáskapcsolat: Marketplace-szolgáltatáskapcsolat létrehozása folyamathozzáférés-engedélyekkel
CI/CD-folyamat befejezése
Hozzon létre egy YAML-folyamatot átfogó fázisokkal a teszteléshez, a csomagoláshoz és a közzétételhez:
trigger:
- main
pool:
vmImage: "ubuntu-latest"
variables:
- group: extension-variables # Your variable group name
stages:
- stage: Test_and_validate
displayName: 'Run Tests and Validate Code'
jobs:
- job: RunTests
displayName: 'Execute unit tests'
steps:
- task: TfxInstaller@4
displayName: 'Install TFX CLI'
inputs:
version: "v0.x"
- task: Npm@1
displayName: 'Install task dependencies'
inputs:
command: 'install'
workingDir: '/MyCustomTask' # Update to your task directory
- task: Bash@3
displayName: 'Compile TypeScript'
inputs:
targetType: "inline"
script: |
cd MyCustomTask # Update to your task directory
tsc
- task: Npm@1
displayName: 'Run unit tests'
inputs:
command: 'custom'
workingDir: '/MyCustomTask' # Update to your task directory
customCommand: 'test' # Ensure this script exists in package.json
- task: PublishTestResults@2
displayName: 'Publish test results'
inputs:
testResultsFormat: 'JUnit'
testResultsFiles: '**/test-results.xml'
searchFolder: '$(System.DefaultWorkingDirectory)'
- stage: Package_extension
displayName: 'Package Extension'
dependsOn: Test_and_validate
condition: succeeded()
jobs:
- job: PackageExtension
displayName: 'Create VSIX package'
steps:
- task: TfxInstaller@4
displayName: 'Install TFX CLI'
inputs:
version: "v0.x"
- task: Npm@1
displayName: 'Install dependencies'
inputs:
command: 'install'
workingDir: '/MyCustomTask'
- task: Bash@3
displayName: 'Compile TypeScript'
inputs:
targetType: "inline"
script: |
cd MyCustomTask
tsc
- task: QueryAzureDevOpsExtensionVersion@4
name: QueryVersion
displayName: 'Query current extension version'
inputs:
connectTo: 'VsTeam'
connectedServiceName: 'marketplace-connection'
publisherId: '$(publisherId)'
extensionId: '$(extensionId)'
versionAction: 'Patch'
- task: PackageAzureDevOpsExtension@4
displayName: 'Package extension'
inputs:
rootFolder: '$(System.DefaultWorkingDirectory)'
publisherId: '$(publisherId)'
extensionId: '$(extensionId)'
extensionName: '$(extensionName)'
extensionVersion: '$(QueryVersion.Extension.Version)'
updateTasksVersion: true
updateTasksVersionType: 'patch'
extensionVisibility: 'private'
extensionPricing: 'free'
- task: PublishBuildArtifacts@1
displayName: 'Publish VSIX artifact'
inputs:
PathtoPublish: '$(System.DefaultWorkingDirectory)/*.vsix'
ArtifactName: '$(artifactName)'
publishLocation: 'Container'
- stage: Publish_to_marketplace
displayName: 'Publish to Marketplace'
dependsOn: Package_extension
condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))
jobs:
- deployment: PublishExtension
displayName: 'Deploy to marketplace'
environment: 'marketplace-production'
strategy:
runOnce:
deploy:
steps:
- task: TfxInstaller@4
displayName: 'Install TFX CLI'
inputs:
version: "v0.x"
- task: PublishAzureDevOpsExtension@4
displayName: 'Publish to marketplace'
inputs:
connectTo: 'VsTeam'
connectedServiceName: 'marketplace-connection'
fileType: 'vsix'
vsixFile: '$(Pipeline.Workspace)/$(artifactName)/*.vsix'
publisherId: '$(publisherId)'
extensionId: '$(extensionId)'
extensionName: '$(extensionName)'
updateTasksVersion: false
extensionVisibility: 'private'
extensionPricing: 'free'
package.json konfigurálása teszteléshez
Tesztszkriptek hozzáadása a következőhöz package.json:
{
"scripts": {
"test": "mocha tests/_suite.js --reporter xunit --reporter-option output=test-results.xml",
"test-verbose": "cross-env TASK_TEST_TRACE=1 npm test"
}
}
Folyamatszakaszok lebontása
1. szakasz: Tesztelés és ellenőrzés
- Cél: A kód minőségének és működésének biztosítása
- Műveletek: Függőségek telepítése, TypeScript fordítása, egységtesztek futtatása, eredmények közzététele
- Ellenőrzés: Minden tesztnek át kell mennie a folytatáshoz
2. szakasz: Csomagbővítmény
- Cél: Üzembe helyezhető VSIX-csomag létrehozása
- Műveletek: Aktuális verzió, növekményes verzió, csomagbővítmény lekérdezése, összetevők közzététele
- Verziószámozás: Automatikusan kezeli a verziónövekményeket
3. szakasz: Közzététel a piactéren
- Cél: Üzembe helyezés a Visual Studio Marketplace-en
- Feltételek: Csak a főágon fut a sikeres csomagolás után
- Környezet: Üzembehelyezési környezetet használ jóváhagyási kapukhoz
Ajánlott eljárások a CI/CD-hez
- Ágvédelem: Csak a fő/kiadási ágakból való közzététel
- Környezeti kapuk: Üzemi környezetek használata éles kiadásokhoz
- Verziókezelés: Verziónövekmények automatizálása az ütközések elkerülése érdekében
- Tesztelési lefedettség: Átfogó tesztelési lefedettség biztosítása a csomagolás előtt
- Biztonság: Szolgáltatáskapcsolatok használata a merevlemezes hitelesítő adatok helyett
- Figyelés: Riasztások beállítása sikertelen üzemelő példányokhoz
A klasszikus buildelési folyamatok esetében kövesse az alábbi lépéseket a bővítmények csomagolásának és közzétételének beállításához:
Adja hozzá a
BashTypeScript JavaScriptbe fordításához tartozó feladatot.A meglévő verzió lekérdezéséhez adja hozzá a Lekérdezésbővítmény verziója feladatot a következő bemenetekkel:
- Csatlakozás a következőhöz: Visual Studio Marketplace
- Visual Studio Marketplace (szolgáltatáskapcsolat): Szolgáltatáskapcsolat
- Közzétevő azonosítója: A Visual Studio Marketplace-közzétevő azonosítója
- Bővítmény azonosítója: A fájlban lévő
vss-extension.jsonbővítmény azonosítója - Verzió növelése: Javítás
- Kimeneti változó:
Task.Extension.Version
Ha a bővítményeket json jegyzék alapján szeretné csomagolni, adja hozzá a Csomagbővítmény feladatot a következő bemenetek használatával:
- Gyökér manifesztek mappa: A manifesztfájlt tartalmazó gyökérkönyvtárra hivatkozik. Például
$(System.DefaultWorkingDirectory)a gyökérkönyvtár - Jegyzékfájl:
vss-extension.json - Közzétevő azonosítója: A Visual Studio Marketplace-közzétevő azonosítója
- Bővítmény azonosítója: A fájlban lévő
vss-extension.jsonbővítmény azonosítója - Bővítmény neve: A fájlban lévő
vss-extension.jsonbővítmény neve - Bővítmény verziója:
$(Task.Extension.Version) - Feladatok verziójának felülbírálása: kiválasztva (igaz)
- Felülbírálás típusa: Csak a folt cseréje (1.0.r)
- Bővítmény láthatósága: Ha a bővítmény még fejlesztés alatt áll, állítsa be az értéket privátra. A bővítmény nyilvános kiadásához állítsa az értéket nyilvánosra.
- Gyökér manifesztek mappa: A manifesztfájlt tartalmazó gyökérkönyvtárra hivatkozik. Például
A közzétett fájlokba való másoláshoz adja hozzá a Fájlok másolása feladatot a következő bemenetekkel:
- Tartalom: Az összes fájl, amelyeket közzétételhez műtárgyként másolni kell
- Célmappa: Az a mappa, amelybe a fájlok át lesznek másolva
- Például:
$(Build.ArtifactStagingDirectory)
- Például:
Adja hozzá a Build-artefaktok közzététele elemet az artefaktok közzétételéhez, hogy más feladatokban vagy folyamatokban is felhasználhatók legyenek. Használja a következő bemeneteket:
- Közzététel elérési útja: A közzétett fájlokat tartalmazó mappa elérési útja
- Például:
$(Build.ArtifactStagingDirectory)
- Például:
- Összetevő neve: Az összetevőnek adott név
- Összetevők közzétételi helye: Az Azure Pipelines kiválasztása az összetevő jövőbeli feladatokban való használatához
- Közzététel elérési útja: A közzétett fájlokat tartalmazó mappa elérési útja
3. szakasz: Buildösszetevők letöltése és a bővítmény közzététele
A tfx-cli buildügynökre való telepítéséhez adja hozzá a Use Node CLI for Azure DevOps (tfx-cli) szolgáltatást.
Ha az összetevőket egy új feladatra szeretné letölteni, adja hozzá a buildösszetevők letöltése feladatot a következő bemenetekkel:
- A következő által létrehozott összetevők letöltése: Ha az összetevőt egy új feladatra tölti le ugyanabból a folyamatból, válassza az Aktuális build lehetőséget. Ha új folyamatra tölt le, válassza az Adott build lehetőséget
- Letöltés típusa: Válassza ki az Adott összetevőt az összes közzétett fájl letöltéséhez.
- Összetevő neve: A közzétett összetevő neve
- Célkönyvtár: Az a mappa, amelyben a fájlokat le kell tölteni
A Közzétételi bővítmény feladat lekéréséhez használja a következő bemeneteket:
- Csatlakozás a következőhöz: Visual Studio Marketplace
- Visual Studio Marketplace-kapcsolat: ServiceConnection
- Bemeneti fájl típusa: VSIX-fájl
- VSIX-fájl:
/Publisher.*.vsix - Közzétevő azonosítója: A Visual Studio Marketplace-közzétevő azonosítója
- Bővítmény azonosítója: A fájlban lévő
vss-extension.jsonbővítmény azonosítója - Bővítmény neve: A fájlban lévő
vss-extension.jsonbővítmény neve - Bővítmény láthatósága: Privát vagy nyilvános
Nem kötelező: A bővítmény telepítése és tesztelése
A bővítmény közzététele után telepíteni kell az Azure DevOps-szervezetekben.
Bővítmény telepítése a szervezet számára
Telepítse a megosztott bővítményt néhány lépésben:
Lépjen a Szervezeti beállítások elemre , és válassza a Bővítmények lehetőséget.
Keresse meg a bővítményt a Velem megosztott bővítmények szakaszban:
- A bővítmény hivatkozásának kiválasztása
- Válassza a Get it free or Install (Ingyenes vagy Telepítés) lehetőséget
Ellenőrizze, hogy a bővítmény megjelenik-e a Telepített bővítmények listában:
- Ellenőrizze, hogy elérhető-e a folyamat feladattárában
Megjegyzés
Ha nem látja a Bővítmények lapot, győződjön meg arról, hogy a szervezet adminisztrációs szintjén (https://dev.azure.com/{organization}/_admin) van, és nem a projekt szintjén.
Teljes körű tesztelés
A telepítés után végezzen átfogó tesztelést:
Tesztfolyamat létrehozása:
- Egyéni tevékenység hozzáadása új folyamathoz
- Az összes bemeneti paraméter konfigurálása
- Tesztelés különböző bemeneti kombinációkkal
Funkciók ellenőrzése:
- A folyamat futtatása és a végrehajtás figyelése
- Feladatkimenetek és naplók ellenőrzése
- Hibakezelés ellenőrzése érvénytelen bemenetekkel
Tesztteljesítmény:
- Nagy bemeneti fájlokkal végzett tesztelés (ha van)
- Erőforrás-használat figyelése
- Időtúllépési viselkedés ellenőrzése
Gyakori kérdések
K: Hogyan történik a feladattörlés kezelése?
Válasz: A folyamatügynök elküldi SIGINT és SIGTERM jelzi a feladatfolyamatokat. Bár a feladattár nem biztosít explicit lemondási kezelést, a feladat képes jelkezelőket implementálni. További részletekért lásd: Ügynökfeladatok lemondása.
K: Hogyan távolíthatok el egy feladatot a szervezetemből?
Válasz: Az automatikus törlés nem támogatott , mert megszakítaná a meglévő folyamatokat. Helyette:
- A tevékenység elavultként való megjelölése
- Verziókezelés: A feladat verziójának ütköztetése
- Kommunikáció: A felhasználók értesítése az elavulás idővonaláról
K: Hogyan frissíthetem a feladatomat a legújabb Node.js verzióra?
V: Frissítsen a csomópont legújabb verziójára a jobb teljesítmény és biztonság érdekében. A migrálással kapcsolatos útmutatásért lásd: Feladatok frissítése a Node 20-ra.
Több csomópontverzió támogatásához több végrehajtási szakaszt is be kell sorolni a következőbe task.json:
"execution": {
"Node20_1": {
"target": "index.js"
},
"Node10": {
"target": "index.js"
}
}
A Node 20-tal rendelkező ügynökök az előnyben részesített verziót használják, míg a régebbi ügynökök visszaállnak a Node 10-esre.
A feladatok frissítése:
Annak érdekében, hogy a kód a várt módon viselkedjen, tesztelje a feladatokat a Node különböző futóverzióiban.
A feladat végrehajtási szakaszában frissítsen a
NodevagyNode10állapotról aNode16vagyNode20állapotra.A régebbi kiszolgálóverziók támogatásához el kell hagynia a
Node/Node10célt. Előfordulhat, hogy a régebbi Azure DevOps Server-verziók nem tartalmazzák a Node legújabb futóverzióit.Megadhatja, hogy megosztja-e a célban definiált belépési pontot, vagy hogy a célokat a használt csomópontverzióra optimalizálja.
"execution": { "Node10": { "target": "bash10.js", "argumentFormat": "" }, "Node16": { "target": "bash16.js", "argumentFormat": "" }, "Node20_1": { "target": "bash20.js", "argumentFormat": "" } }
Fontos
Ha nem adja hozzá a Node 20 futó támogatását az egyéni feladatokhoz, nem fognak működni azokról az ügynökökről, amelyek a pipelines-agent-*kiadási csatornáról lettek telepítve.