Egyéni folyamatok tevékenységbővítményének hozzáadása
Azure DevOps Services | Azure DevOps Server 2022 – Azure DevOps Server 2019
Megtudhatja, hogyan telepítheti a bővítményeket a szervezetére egyéni buildelési vagy kiadási feladatokhoz az Azure DevOpsban. További információ: Mi az Azure Pipelines?
Feljegyzé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 további információkért tekintse meg a Kiszolgálói feladat GitHub dokumentációját.
Előfeltételek
Az Azure DevOps bővítményeinek létrehozásához az alábbi szoftverekre és eszközökre van szüksége.
Szoftver/eszköz | Tájékoztatás |
---|---|
Azure DevOps-szervezet | Hozzon létre egy szervezetet. |
Szövegszerkesztő | Számos eljárás esetén a Visual Studio Code-ot használjuk, amely intelliense és hibakeresési támogatást nyújt. Töltse le a legújabb verziót. |
Node.js | Töltse le a legújabb verziót. |
npmjs.com 4.0.2 vagy újabb | TypeScript Compiler. Töltse le a legújabb verziót. |
tfx-cli | Csomagolja be a bővítményt az Azure DevOps platformfüggetlen parancssori felületével. a parancs futtatásával npm a Node.js egyik összetevőjét használja npm i -g tfx-cli . |
Azure DevOps-bővítmény SDK | Telepítse az azure-devops-extension-sdk csomagot. |
A home projekt könyvtára |
A home build- vagy kiadási feladatbővítmény könyvtárának az alábbi példához hasonlóan kell kinéznie a cikkben leírt lépések elvégzése után. |
|--- README.md
|--- images
|--- extension-icon.png
|--- buildandreleasetask // where your task scripts are placed
|--- vss-extension.json // extension's manifest
Fontos
A fejlesztői gépnek a Node legújabb verzióját kell futtatnia, hogy az írott kód kompatibilis legyen az ügynök éles környezetével és a legújabb nem előzetes verzióval azure-pipelines-task-lib
. Frissítse a task.json fájlt az alábbi parancs szerint:
"execution": {
"Node20_1": {
"target": "index.js"
}
}
1. Egyéni feladat létrehozása
Végezze el az eljárás minden részét a buildandreleasetask
mappában.
Feljegyzés
Ez a példa végigvezeti a Windowst a PowerShell-lel. Általánossá tettük az összes platformon, de a környezeti változók lekérésének szintaxisa eltérő. Ha Macet vagy Linuxot használ, cserélje le az összes példányt $env:<var>=<val>
a következőre export <var>=<val>
: .
Feladat-állványzat létrehozása
Hozza létre a feladat mappastruktúráját, és telepítse a szükséges kódtárakat és függőségeket.
Nyisson meg egy PowerShell-parancsablakot, nyissa meg a
buildandreleasetask
mappát, és futtassa a következő parancsot.npm init --yes
npm init
hozza létre apackage.json
fájlt. Hozzáadtuk a paramétert--yes
az összes alapértelmezettnpm init
beállítás elfogadásához.Tipp.
Az ügynök nem telepíti automatikusan a szükséges modulokat, mert azt várja, hogy a feladatmappa tartalmazza a csomópontmodulokat. A probléma elhárításához másolja a következőbe
buildandreleasetask
:node_modules
. Ahogy a feladat egyre nagyobb lesz, egyszerűen túllépheti a VSIX-fájlok méretkorlátját (50 MB). A csomópontmappa másolása előtt érdemes lehet futtatninpm install --production
vagynpm prune --production
írni egy szkriptet, amely mindent összeállít és becsomagol.Adja hozzá
azure-pipelines-task-lib
a tárhoz.npm install azure-pipelines-task-lib --save
Győződjön meg arról, hogy a TypeScript-gépelések telepítve vannak a külső függőségekhez.
npm install @types/node --save-dev npm install @types/q --save-dev
Hozzon létre egy
.gitignore
fájlt, és adjon hozzá node_modules. A buildelési folyamatnak végrekellt kell végeznienpm install
typings install
, hogy a node_modules minden alkalommal elkészüljenek, és ne kelljen bejelentkeznie.echo node_modules > .gitignore
Telepítse a Mocha-t fejlesztési függőségként.
npm install mocha --save-dev -g npm install sync-request --save-dev npm install @types/mocha --save-dev
Válassza a TypeScript 2.3.4-es vagy 4.6.3-es verzióját.
npm install typescript@4.6.3 -g --save-dev
Feljegyzés
Győződjön meg arról, hogy a TypeScript globálisan telepítve van az npm használatával a fejlesztői környezetben, hogy a
tsc
parancs elérhető legyen. Ha kihagyja ezt a lépést, a TypeScript 2.3.4-es verziója alapértelmezés szerint használatban lesz, és globálisan kell telepítenie a csomagot, hogy elérhető legyen atsc
parancs.Fordítóbeállítások létrehozása
tsconfig.json
. Ez a fájl biztosítja, hogy a TypeScript-fájlok JavaScript-fájlokra legyenek lefordítva.tsc --init --target es2022
Feladat létrehozása
Most, hogy az állványzat elkészült, létrehozhatjuk az egyéni feladatunkat.
Hozzon létre egy
task.json
fájlt abuildandreleasetask
mappában. Atask.json
fájl leírja a buildelési/kiadási feladatot, és a build/kiadási rendszer a konfigurációs beállítások felhasználó számára való megjelenítésére és annak megismerésére, hogy mely szkripteket kell végrehajtani a build/kiadás idején.Másolja ki a következő kódot, és cserélje le a
{{placeholders}}
feladat adataira. A legfontosabb helyőrző ataskguid
, és egyedinek kell lennie.{ "$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" } } }
Hozzon létre egy
index.ts
fájlt az alábbi kód hivatkozásként való használatával. Ez a kód a feladat meghívásakor fut.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();
Írja be a "tsc" kifejezést a mappából egy
buildandreleasetask
fájl fordításáhozindex.js
a mappábólindex.ts
.
task.json összetevők
Tekintse meg a fájl egyes összetevőinek task.json
alábbi leírását.
Tulajdonság | Leírás |
---|---|
id |
A feladat egyedi GUID azonosítója. |
name |
Név szóköz nélkül. |
friendlyName |
Leíró név (megengedett szóközök). |
description |
A tevékenység tevékenységének részletes leírása. |
author |
A buildelési vagy kiadási feladatot fejlesztő entitást leíró rövid sztring, például: "Microsoft Corporation". |
instanceNameFormat |
Hogyan jelenik meg a feladat a buildelési/kiadási lépéslistában. A változóértékeket a $(variablename) használatával használhatja. |
groups |
A feladattulajdonságok logikai csoportosítását ismerteti a felhasználói felületen. |
inputs |
A buildelési vagy kiadási feladat futtatásakor használandó bemenetek. Ez a feladat a névmintákat tartalmazó bemenetet várja. |
execution |
A feladat végrehajtási beállításai, beleértve a szkripteket is. |
restrictions |
A GitHub Codespaces parancsokkal kapcsolatos tevékenységre alkalmazott korlátozások meghívhatók, és a változók tevékenység beállíthatók. Javasoljuk, hogy adjon meg korlátozási módot az új tevékenységekhez. |
Feljegyzés
Hozzon létre egy id
következő parancsot a PowerShellben:
(New-Guid).Guid
További információkért tekintse meg a buildelési/kiadási feladatra vonatkozó referenciát.
A feladat futtatása
Futtassa a feladatot a node index.js
PowerShellből.
Az alábbi példában a feladat meghiúsul, mert a bemenetek nem lettek megadva (samplestring
ez egy kötelező bemenet).
node index.js
##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
Javításként beállíthatjuk a samplestring
bemenetet, és újra futtathatjuk a feladatot.
$env:INPUT_SAMPLESTRING="Human"
node index.js
##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]Agent.ProxyUrl=undefined
##vso[task.debug]Agent.CAInfo=undefined
##vso[task.debug]Agent.ClientCert=undefined
##vso[task.debug]Agent.SkipCertValidation=undefined
##vso[task.debug]samplestring=Human
Hello Human
Ezúttal a feladat sikeres volt, mert samplestring
a megadott és helyesen kimenetelt "Hello Human!"
Tipp.
A különböző feladatfuttatókról és a legújabb csomópontverzió task.json való hozzáadásáról további információt az Azure Pipelines-feladatkészítők csomópontfuttatóinak frissítési útmutatójában talál.
2. Egység tesztelje a feladatszkripteket
Az egységtesztekkel gyorsan tesztelheti a feladatszkriptet, és nem az általa hívott külső eszközöket. Tesztelje a sikeres és a sikertelen elérési utak minden aspektusát.
Telepítse a teszteszközöket. Ebben az eljárásban a Mocha-t használjuk tesztvezetőként.
npm install mocha --save-dev -g npm install sync-request --save-dev npm install @types/mocha --save-dev
Hozzon létre egy
tests
_suite.ts
fájlt tartalmazó mappát a következő tartalommal: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() { }); after(() => { }); it('should succeed with simple inputs', function(done: Mocha.Done) { // Add success test here }); it('it should fail if tool returns 1', function(done: Mocha.Done) { // Add failure test here }); });
Tipp.
A tesztmappának a buildandreleasetask mappában kell lennie. Ha szinkronizálási kérési hibát kap, megkerülheti azt úgy, hogy a parancsot
npm i --save-dev sync-request
hozzáadja a buildandreleasetask mappához.Hozzon létre egy
success.ts
fájlt a tesztkönyvtárban az alábbi tartalommal. Ez a fájllétrehozás szimulálja a feladat futtatását, és a külső metódusokra irányuló összes hívást szimulálja.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); tmr.setInput('samplestring', 'human'); tmr.run();
A sikerességi teszt ellenőrzi, hogy a megfelelő bemenetekkel hiba vagy figyelmeztetés nélkül sikerül-e, és a megfelelő kimenetet adja vissza.
Adja hozzá a következő sikeres sikerességi tesztet a
_suite.ts
fájlhoz a feladatfuttató futtatásához.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.run(); //current, old function. 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 egy
failure.ts
fájlt a tesztkönyvtárban feladatmockafuttatóként a következő tartalommal: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); tmr.setInput('samplestring', 'bad'); tmr.run();
A hibateszt ellenőrzi, hogy ha az eszköz rossz vagy hiányos bemenetet kap, a várt módon, hasznos kimenettel meghiúsul.
Adja hozzá a következő kódot a
_suite.ts
fájlhoz a feladatfuttató futtatásához.it('it should fail if tool returns 1', function(done: Mocha.Done) { this.timeout(1000); let tp = path.join(__dirname, 'failure.js'); let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); tr.run(); 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(); });
Futtassa a teszteket.
tsc mocha tests/_suite.js
Mindkét tesztnek át kell mennie. Ha részletesebb kimenettel szeretné futtatni a teszteket (amit a buildkonzolban látna), állítsa be a környezeti változót:
TASK_TEST_TRACE=1
.$env:TASK_TEST_TRACE=1
3. A bővítmény jegyzékfájljának létrehozása
A bővítményjegyzék tartalmazza a bővítményre vonatkozó összes információt. A fájlokra mutató hivatkozásokat tartalmaz, beleértve a feladatmappákat és a képek mappáit. Győződjön meg arról, hogy létrehozott egy lemezképmappát extension-icon.png. Az alábbi példa egy bővítményjegyzék, amely tartalmazza a buildelési vagy kiadási feladatot.
Másolja ki a következő .json kódot, és mentse fájlként vss-extension.json
a home
könyvtárba.
Ne hozza létre ezt a fájlt a buildandreleasetask mappában.
{
"manifestVersion": 1,
"id": "build-release-task",
"name": "Fabrikam Build and Release Tools",
"version": "0.0.1",
"publisher": "fabrikam",
"targets": [
{
"id": "Microsoft.VisualStudio.Services"
}
],
"description": "Tools for building/releasing with Fabrikam. Includes one build/release task.",
"categories": [
"Azure Pipelines"
],
"icons": {
"default": "images/extension-icon.png"
},
"files": [
{
"path": "buildandreleasetask"
}
],
"contributions": [
{
"id": "custom-build-release-task",
"type": "ms.vss-distributed-task.task",
"targets": [
"ms.vss-distributed-task.tasks"
],
"properties": {
"name": "buildandreleasetask"
}
}
]
}
Feljegyzés
Módosítsa a közzétevőt a közzétevő nevére. További információ: Közzétevő létrehozása.
Hozzájárulások
Tulajdonság | Leírás |
---|---|
id |
A hozzájárulás azonosítója. A bővítményen belül egyedinek kell lennie. Nem kell megegyeznie a buildelési vagy kiadási feladat nevével. A buildelési vagy kiadási tevékenység neve általában a hozzájárulás azonosítójában található. |
type |
A hozzájárulás típusa. Ms.vss-distributed-task.task. |
targets |
A hozzájárulás által "megcélzott" hozzájárulások. Ms.vss-distributed-task.tasks fájlnak kell lennie. |
properties.name |
A tevékenység neve. Ennek a névnek meg kell egyeznie a megfelelő önálló buildelési vagy kiadási folyamat feladat mappanevével. |
Fájlok
Tulajdonság | Leírás |
---|---|
path |
A fájl vagy mappa elérési útja a home könyvtárhoz viszonyítva. |
Feljegyzés
A bővítmény jegyzékfájljáról, például a tulajdonságairól és a műveletekről további információt a bővítmény jegyzékfájljának hivatkozásában talál.
4. A bővítmény csomagolása
Csomagolja össze az összes fájlt, hogy bejuttassa a bővítményt a Visual Studio Marketplace-be. Minden bővítmény VSIX 2.0-kompatibilis .vsix-fájlként van csomagolva. A Microsoft egy platformfüggetlen parancssori felületet (CLI) biztosít a bővítmény csomagolásához.
Miután megkapta a tfx-cli-t, lépjen a bővítmény kezdőlapjára, és futtassa a következő parancsot:
tfx extension create --manifest-globs vss-extension.json
Feljegyzés
A bővítmény vagy integráció verzióját minden frissítésnél növelni kell.
Meglévő bővítmény frissítésekor frissítse a jegyzékben szereplő verziót, vagy adja át a parancssori --rev-version
kapcsolót. Ez növeli a bővítmény javításverziójának számát, és menti az új verziót a jegyzékbe.
A frissítéshez a feladatverziót és a bővítményverziót is át kell adni. tfx extension create --manifest-globs vss-extension.json --rev-version
csak a bővítmény verzióját frissíti, a feladatverziót nem. További információ: Feladat összeállítása a GitHubon.
Ha a csomagolt bővítmény egy .vsix-fájlban található, készen áll a bővítmény közzétételére a Marketplace-en.
5. A bővítmény közzététele
A bővítmény közzétételéhez először létre kell hoznia a közzétevőt, majd fel kell töltenie a bővítményt, majd meg kell osztania.
A közzétevő létrehozása
Minden bővítményt, beleértve a Microsoft bővítményeit is, a közzétevő által biztosítottként azonosítja. Ha még nem tagja egy meglévő közzétevőnek, hozzon létre egyet.
- Jelentkezzen be a Visual Studio Marketplace közzétételi portálra.
- Ha még nem tagja egy meglévő közzétevőnek, a rendszer kérni fogja, hogy hozzon létre egy közzétevőt. Ha a rendszer nem kéri közzétevő létrehozását, görgessen le a lap aljára, és válassza a Bővítmények közzététele lehetőséget a Kapcsolódó webhelyek területen.
- Adja meg a közzétevő azonosítóját, például:
mycompany-myteam
.- Ezt az azonosítót használja a
publisher
bővítmények jegyzékfájljában lévő attribútum értékeként.
- Ezt az azonosítót használja a
- Adja meg a közzétevő megjelenítendő nevét, például:
My Team
.
- Adja meg a közzétevő azonosítóját, például:
- Tekintse át a Marketplace-közzétevői szerződést , és válassza a Létrehozás lehetőséget.
A közzétevő definiálva van. Egy későbbi kiadásban engedélyeket adhat a közzétevő bővítményeinek megtekintéséhez és kezeléséhez. Egyszerűbb és biztonságosabb a bővítmények közzététele egy közös közzétevőben anélkül, hogy hitelesítő adatokat kellene megosztaniuk a felhasználók között.
Bővítmény feltöltése
Keresse meg az Új bővítmény feltöltése gombot, nyissa meg a csomagolt .vsix-fájlt, és válassza a Feltöltés lehetőséget.
A bővítményt a parancssori felületen (CLI) is feltöltheti úgy, hogy a parancsot használja ahelyett
tfx extension publish
tfx extension create
, hogy egy lépésben csomagolja és közzétegye a bővítményt. A bővítményt tetszés szerint--share-with
megoszthatja egy vagy több fiókkal a közzététel után.tfx extension publish --manifest-globs your-manifest.json --share-with yourOrganization
Személyes hozzáférési jogkivonat (PAT) létrehozása.
- Válassza ki a "Marketplace (publish)" hatókört. Ez a hatókör korlátozza a jogkivonatot, hogy csak bővítményeket tegyen közzé a Marketplace-en.
A bővítmény megosztása
Most, hogy feltöltötte a bővítményt, a Marketplace-en van, de senki sem láthatja. Ossza meg a szervezettel, hogy telepítheti és tesztelheti.
Válassza ki a jobb gombbal a bővítményt, és válassza a Megosztás lehetőséget, majd adja meg a szervezeti adatokat. Megoszthatja más fiókokkal is, amelyekhez hozzá szeretne férni a bővítményhez.
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.
Most, hogy a bővítmény meg van osztva a Marketplace-en, minden használni kívánt felhasználónak telepítenie kell.
6. Hozzon létre egy buildelési és kiadási folyamatot a bővítmény Marketplace-en való közzétételéhez
Hozzon létre egy buildelési és kiadási folyamatot az Azure DevOpsban, amely segít fenntartani az egyéni feladatot a Marketplace-en.
Előfeltételek
Szoftver/eszköz
Tájékoztatás
Azure DevOps-projekt
Azure DevOps Extension Tasks bővítmény
Telepítse ingyenesen az Azure DevOps-bővítményfeladatokat a szervezetében.
Folyamattár változócsoportja
Hozzon létre egy folyamattár változócsoportot a folyamat által használt változók tárolásához. További információ: Változócsoportok hozzáadása és használata. Változócsoportokat az Azure DevOps Library lapjáról vagy a parancssori felületről hozhat létre. Használja a csoporton belüli változókat a folyamatban. Emellett deklarálja a következő változókat a változócsoportban:
publisherId
: A marketplace-közzétevő azonosítójaextensionId
: A bővítmény azonosítója a vss-extension.json fájlban deklarált módonextensionName
: A bővítmény neve a vss-extension.json fájlban deklarált módonartifactName
: A VSIX-fájlhoz létrehozott összetevő neve
Szolgáltatáskapcsolat
Hozzon létre egy új Marketplace-szolgáltatáskapcsolatot, és adjon hozzáférési engedélyeket az összes folyamathoz.
YAML-folyamat
Az alábbi példában létrehozhat egy új folyamatot a YAML használatával. További információ: Az első folyamat és a YAML-séma létrehozása.
trigger:
- main
pool:
vmImage: "ubuntu-latest"
variables:
- group: variable-group # Rename to whatever you named your variable group in the prerequisite stage of step 6
stages:
- stage: Run_and_publish_unit_tests
jobs:
- job:
steps:
- task: TfxInstaller@4
inputs:
version: "v0.x"
- task: Npm@1
inputs:
command: 'install'
workingDir: '/TaskDirectory' # Update to the name of the directory of your task
- task: Bash@3
displayName: Compile Javascript
inputs:
targetType: "inline"
script: |
cd TaskDirectory # Update to the name of the directory of your task
tsc
- task: Npm@1
inputs:
command: 'custom'
workingDir: '/TestsDirectory' # Update to the name of the directory of your task's tests
customCommand: 'testScript' # See the definition in the explanation section below - it may be called test
- task: PublishTestResults@2
inputs:
testResultsFormat: 'JUnit'
testResultsFiles: '**/ResultsFile.xml'
- stage: Package_extension_and_publish_build_artifacts
jobs:
- job:
steps:
- task: TfxInstaller@4
inputs:
version: "0.x"
- task: Npm@1
inputs:
command: 'install'
workingDir: '/TaskDirectory' # Update to the name of the directory of your task
- task: Bash@3
displayName: Compile Javascript
inputs:
targetType: "inline"
script: |
cd TaskDirectory # Update to the name of the directory of your task
tsc
- task: QueryAzureDevOpsExtensionVersion@4
name: QueryVersion
inputs:
connectTo: 'VsTeam'
connectedServiceName: 'ServiceConnection' # Change to whatever you named the service connection
publisherId: '$(PublisherID)'
extensionId: '$(ExtensionID)'
versionAction: 'Patch'
- task: PackageAzureDevOpsExtension@4
inputs:
rootFolder: '$(System.DefaultWorkingDirectory)'
publisherId: '$(PublisherID)'
extensionId: '$(ExtensionID)'
extensionName: '$(ExtensionName)'
extensionVersion: '$(QueryVersion.Extension.Version)'
updateTasksVersion: true
updateTasksVersionType: 'patch'
extensionVisibility: 'private' # Change to public if you're publishing to the marketplace
extensionPricing: 'free'
- task: CopyFiles@2
displayName: "Copy Files to: $(Build.ArtifactStagingDirectory)"
inputs:
Contents: "**/*.vsix"
TargetFolder: "$(Build.ArtifactStagingDirectory)"
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: '$(ArtifactName)'
publishLocation: 'Container'
- stage: Download_build_artifacts_and_publish_the_extension
jobs:
- job:
steps:
- task: TfxInstaller@4
inputs:
version: "v0.x"
- task: DownloadBuildArtifacts@0
inputs:
buildType: "current"
downloadType: "single"
artifactName: "$(ArtifactName)"
downloadPath: "$(System.DefaultWorkingDirectory)"
- task: PublishAzureDevOpsExtension@4
inputs:
connectTo: 'VsTeam'
connectedServiceName: 'ServiceConnection' # Change to whatever you named the service connection
fileType: 'vsix'
vsixFile: '$(PublisherID).$(ExtensionName)/$(PublisherID)..vsix'
publisherId: '$(PublisherID)'
extensionId: '$(ExtensionID)'
extensionName: '$(ExtensionName)'
updateTasksVersion: false
extensionVisibility: 'private' # Change to public if you're publishing to the marketplace
extensionPricing: 'free'
További információ: Folyamatok eseményindító eseményeinek megadása.
Feljegyzés
Minden feladat új felhasználói ügynököt használ, és függőségeket kell telepítenie.
Folyamatszakaszok
Az alábbi szakasz segít megérteni a folyamat szakaszainak működését.
1. szakasz: Egységtesztek futtatása és közzététele
Ez a szakasz egységteszteket futtat, és közzéteszi a teszteredményeket az Azure DevOpsban.
Az egységtesztek futtatásához adjon hozzá egy egyéni szkriptet a package.json fájlhoz az alábbi példához hasonlóan.
"scripts": {
"testScript": "mocha ./TestFile --reporter xunit --reporter-option output=ResultsFile.xml"
},
Adja hozzá a "Node CLI használata az Azure DevOpshoz (tfx-cli)" parancsot a tfx-cli buildügynökre való telepítéséhez.
Adja hozzá az "npm" feladatot a "install" paranccsal, és célozza meg a mappát a package.json fájllal.
Adja hozzá a "Bash" feladatot a TypeScript JavaScriptbe való fordításához.
Adja hozzá az "npm" feladatot az "egyéni" paranccsal, célozza meg az egységteszteket tartalmazó mappát, és adja meg a bemenetet
testScript
parancsként. Használja a következő bemeneteket:- Parancs: egyéni
- Package.json tartalmazó munkamappa: /TestsDirectory
- Parancsok és argumentumok:
testScript
Adja hozzá a "Teszteredmények közzététele" feladatot. Ha a Mocha XUnit-riportert használja, győződjön meg arról, hogy az eredmény formátuma "JUnit" és nem "XUnit". Állítsa a keresési mappát a gyökérkönyvtárra. Használja a következő bemeneteket:
- Teszteredmény formátuma: JUnit
- Teszteredmény-fájlok: **/ResultsFile.xml
- Keresési mappa:
$(System.DefaultWorkingDirectory)
A teszteredmények közzététele után a tesztek lap kimenetének az alábbi példához hasonlóan kell kinéznie.
2. szakasz: A bővítmény csomagolása és buildösszetevők közzététele
Adja hozzá a "Node CLI használata az Azure DevOpshoz (tfx-cli)" parancsot a tfx-cli buildügynökre való telepítéséhez.
Adja hozzá az "npm" feladatot a "install" paranccsal, és célozza meg a mappát a package.json fájllal.
Adja hozzá a "Bash" feladatot a TypeScript JavaScriptbe való fordításához.
Adja hozzá a "Lekérdezésbővítmény verziója" feladatot a meglévő bővítményverzió lekérdezéséhez. Használja a következő bemeneteket:
- 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 bővítmény azonosítója a vss-extension.json fájlban
- Verzió növelése: Javítás
- Kimeneti változó: Task.Extension.Version
Adja hozzá a "Csomagbővítmény" feladatot a bővítmények Json-jegyzék alapján történő csomagolásához. Használja a következő bemeneteket:
- Gyökérjegyzék-mappa: A jegyzékfájlt tartalmazó gyökérkönyvtárra mutat. Például a $(System.DefaultWorkingDirectory) a gyökérkönyvtár
- Jegyzékfájl(ok): 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 bővítmény azonosítója a vss-extension.json fájlban
- Bővítmény neve: A bővítmény neve a vss-extension.json fájlban
- Bővítmény verziója: $(Task.Extension.Version)
- Feladatverzió felülbírálása: bejelölve (igaz)
- Felülbírálás típusa: Csak a javítás 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
Adja hozzá a "Fájlok másolása" feladatot a közzétett fájlok másolásához. Használja a következő bemeneteket:
- Tartalom: Az összes másolandó fájl összetevőként való közzétételéhez
- Célmappa: Az a mappa, amelybe a fájlok át lesznek másolva
- Például: $(Build.ArtifactStagingDirectory)
A "Buildösszetevők közzététele" lehetőséggel közzéteheti az összetevőket más feladatokban vagy folyamatokban való használatra. 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)
- Összetevő neve: Az összetevőnek adott név
- Összetevők közzétételi helye: Válassza az "Azure Pipelines" lehetőséget az összetevő későbbi 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
Adja hozzá a "Node CLI használata az Azure DevOpshoz (tfx-cli)" parancsot a tfx-cli buildügynökre való telepítéséhez.
Adja hozzá a "Build-összetevők letöltése" feladatot, hogy letöltse az összetevőket egy új feladatra. Használja a következő bemeneteket:
- 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 az "Adott összetevő" lehetőséget 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, ahová a fájlokat le kell tölteni.
Az utolsó szükséges feladat a "Bővítmény közzététele" tevékenység. 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 bővítmény azonosítója a vss-extension.json fájlban
- Bővítmény neve: A bővítmény neve a vss-extension.json fájlban
- 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
Telepítsen egy önnel néhány lépésben megosztott bővítményt:
- A szervezet vezérlőpultján (
https://dev.azure.com/{organization}/_admin
) lépjen a projektgyűjtemény felügyeleti lapjára. - A Bővítmények lapon keresse meg a bővítményt a "Velem megosztva" csoportban, és válassza ki a bővítményhivatkozást.
- Telepítse a bővítményt.
Ha nem látja a Bővítmények lapot, győződjön meg arról, hogy a vezérlőpulton van (a projektgyűjtemény szintjén található adminisztrációs lap), https://dev.azure.com/{organization}/_admin
és nem a projekt adminisztrációs lapján.
Ha nem látja a Bővítmények lapot, akkor a bővítmények nem engedélyezettek a szervezet számára. A Visual Studio Partner Programhoz való csatlakozással korai hozzáférést kaphat a bővítmények funkcióhoz.
Az Azure DevOps-bővítmények Visual Studio Marketplace-en való csomagolásához és közzétételéhez letöltheti az Azure DevOps Bővítményfeladatokat.
GYIK
Tekintse meg az alábbi gyakori kérdéseket (GYIK) az egyéni buildelési vagy kiadási feladatok Azure DevOps-bővítményekben való hozzáadásával kapcsolatban.
K: Hogyan korlátozhatjam az Azure Pipelines-parancsok használatát a feladathoz?
Korlátozhatja az Azure Pipelines-parancsok használatát és változóit, amelyek feladat szerint lesznek beállítva. Ez a művelet hasznos lehet, ha megakadályozza a változókhoz/vso parancsokhoz való korlátlan hozzáférést azokhoz az egyéni szkriptekhez, amelyeket a feladat végrehajt. Javasoljuk, hogy új feladatokhoz állítsa be. Az alkalmazáshoz a következő utasítást kell hozzáadnia a task.json fájlhoz:
"restrictions": {
"commands": {
"mode": "restricted"
},
"settableVariables": {
"allowed": ["variable1", "test*"]
}
}
Ha restricted
az érték meg van adva mode
– csak a következő parancsokat hajthatja végre a feladattal:
logdetail
logissue
complete
setprogress
setsecret
setvariable
debug
settaskvariable
prependpath
publish
A settableVariables
korlátozások lehetővé teszik a változók engedélyezési listájának átadását, amelyeket a rendszer beállít vagy prependpath
parancsok alapján setvariable
állít be. Az alapszintű reguláris kifejezéseket is lehetővé teszi. Ha például az engedélyezési lista a következő volt: ['abc', 'test*']
, beállítás abc
, test
vagy test1
változóként bármilyen értékkel, vagy az elérési útra való előpendálásuk sikeres lenne, de ha egy változóproxyt próbál beállítani, az figyelmeztetést adna. Az üres lista azt jelenti, hogy a tevékenység nem módosítja a változókat.
Ha a kulcs vagy commands
a settableVariables
kulcs hiányzik, a rendszer nem alkalmazza a vonatkozó korlátozást.
A korlátozási funkció a 2.182.1 ügynök verziójától érhető el.
K: Hogyan kezeli egy feladat a lemondási jelet?
Válasz: A folyamatügynök elküldi SIGINT
és SIGTERM
jelzi a megfelelő gyermekfolyamatot. A feladattárban nincsenek explicit módon feldolgozandó eszközök. További információ: Ügynökfeladatok lemondása.
K: Hogyan távolíthatom el a feladatot a projektgyűjteményből?
Válasz: Nem támogatjuk a tevékenységek automatikus törlését. Az automatikus törlés nem biztonságos, és megszakítja az ilyen feladatokat már használó meglévő folyamatokat. A tevékenységeket azonban elavultként jelölheti meg. Ehhez hajtsa végre a feladatverziót, és jelölje meg a feladatot elavultként.
K: Hogyan frissíthetem az egyéni feladatomat a legújabb csomópontra?
V: Javasoljuk, hogy frissítsen a legújabb Node-verzióra. További információ : Tevékenységek frissítése a Node 20-ra.
Mivel a Microsoft által üzemeltetett ügynökök és az Azure DevOps Server különböző verziói különböző életciklussal rendelkeznek, a feladat futási helyétől függően különböző Node-futóverziók telepíthetők. Ha ugyanazt a feladatot különböző Node-futtató verziójú ügynökökön szeretné futtatni, a task.json fájl több végrehajtási szakaszt is tartalmazhat. Az alábbi példában a Node 20 futót tartalmazó Azure Pipeline-ügynökök alapértelmezés szerint kiválasztják, és azok, amelyek nem fognak visszatérni a Node 10 implementációhoz.
"execution": {
"Node10": {
"target": "bash.js",
"argumentFormat": ""
},
"Node20_1": {
"target": "bash.js",
"argumentFormat": ""
}
A feladatok frissítése:
Tesztelje a feladat(oka)t a Node különböző futóverzióiban, hogy a kód a várt módon viselkedjen.
A feladat végrehajtási szakaszában frissítsen a feladatról vagy a másikra
Node
Node16
Node20
.Node10
A régebbi kiszolgálóverziók támogatásához el kell hagynia a
Node
/Node10
cé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 támogatja a Node 20 futót az egyéni tevékenységeken, a feladatok meghiúsulnak a kiadási pipelines-agent-*
hírcsatornából telepített ügynökökön.