Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Azure DevOps Services | Azure DevOps Server 2022 – Azure DevOps Server 2019
Den här artikeln beskriver hur du installerar tillägg till din organisation för anpassade bygg- eller versionsaktiviteter i Azure DevOps. Mer information finns i Vad är Azure Pipelines?
Anmärkning
Den här artikeln beskriver agentuppgifter i agentbaserade tillägg. Mer information om serveruppgifter och serverbaserade tillägg finns i Redigering av serveraktivitet.
Förutsättningar
En organisation i Azure DevOps. Skapa en organisation.
En textredigerare. I många självstudier använder vi Visual Studio Code, som ger stöd för intellisense och felsökning.
Den senaste versionen av Node.js.
npmjs.com 4.0.2 eller senare. Installera den senaste versionen av den här TypeScript-kompilatorn.
Plattformsoberoende CLI för Azure DevOps (tfx-cli) för att paketera dina tillägg.
- tfx-cli kan installeras med hjälp av
npm
, en komponent i Node.js, genom att köranpm i -g tfx-cli
.
- tfx-cli kan installeras med hjälp av
SDK för Azure DevOps-tillägget. Installera paketet azure-devops-extension-sdk .
En
home
katalog för projektet. Ett build- eller release-uppgiftstilläggs kataloghome
bör ha följande struktur när du har slutfört stegen i den här artikeln:|--- README.md |--- images |--- extension-icon.png |--- buildandreleasetask // where your task scripts are placed |--- vss-extension.json // extension's manifest
Viktigt!
Utvecklingsdatorn måste köra den senaste versionen av Node för att säkerställa att den skrivna koden är kompatibel med produktionsmiljön på agenten och den senaste icke-förhandsversionen av azure-pipelines-task-lib
.
task.json
Uppdatera filen enligt följande kommando:
"execution": {
"Node20_1": {
"target": "index.js"
}
}
1. Skapa en anpassad uppgift
Gör varje del av den här proceduren buildandreleasetask
i mappen i din home
katalog.
Anmärkning
I den här exempelgenomgången används Windows med PowerShell. Stegen är allmänna för alla plattformar, men syntaxen för att hämta miljövariabler är annorlunda. Om du använder en Mac eller Linux ersätter du alla instanser av $env:<var>=<val>
med export <var>=<val>
.
Skapa uppgiftsstruktur
Skapa mappstrukturen för uppgiften och installera de bibliotek och beroenden som krävs.
Öppna ett PowerShell-kommandofönster, gå till mappen
buildandreleasetask
och kör följande kommando.npm init --yes
npm init
skaparpackage.json
-filen. Vi har lagt till parametern--yes
för att acceptera alla standardalternativnpm init
.Tips
Agenten installerar inte automatiskt de moduler som krävs eftersom den förväntar sig att aktivitetsmappen ska innehålla nodmodulerna. För att mildra, kopiera
node_modules
tillbuildandreleasetask
. När uppgiften blir större är det enkelt att överskrida storleksgränsen (50 MB) för en VSIX-fil. Innan du kopierar nodmappen kanske du vill köranpm install --production
ellernpm prune --production
, eller så kan du skriva ett skript för att skapa och packa allt.Lägg till
azure-pipelines-task-lib
i biblioteket.npm install azure-pipelines-task-lib --save
Säkerställ att TypeScript-typer är installerade för externa beroenden.
npm install @types/node --save-dev npm install @types/q --save-dev
Skapa en
.gitignore
fil och lägg till node_modules i den. Din byggprocess bör göra ennpm install
och entypings install
så att node_modules skapas varje gång och inte behöver checkas in.echo node_modules > .gitignore
Installera Mocha som ett utvecklingsberoende.
npm install mocha --save-dev -g npm install sync-request --save-dev npm install @types/mocha --save-dev
Välj TypeScript version 2.3.4 eller 4.6.3.
npm install typescript@4.6.3 -g --save-dev
Anmärkning
Kontrollera att TypeScript är installerat globalt med
npm
i utvecklingsmiljön, så atttsc
kommandot är tillgängligt. Om du hoppar över det här steget används TypeScript version 2.3.4 som standard, och du måste fortfarande installera paketet globalt för att kommandot ska varatsc
tillgängligt.Skapa
tsconfig.json
kompilatoralternativ. Den här filen ser till att dina TypeScript-filer kompileras till JavaScript-filer.tsc --init --target es2022
Skapa uppgift
Nu när byggnadsställningen är klar kan du skapa din anpassade uppgift.
Skapa en
task.json
fil ibuildandreleasetask
mappen. Filentask.json
beskriver bygg-/versionsuppgiften och är vad build/release-systemet använder för att återge konfigurationsalternativ till användaren och för att veta vilka skript som ska köras vid bygg-/lanseringstid.Kopiera följande kod och ersätt
{{placeholders}}
med uppgiftens information. Den viktigaste platshållaren ärtaskguid
, och den måste vara unik.{ "$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" } } }
Skapa en
index.ts
fil med hjälp av följande kod som referens. Den här koden körs när aktiviteten anropas.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();
Om du vill kompilera en
index.js
-fil frånindex.ts
anger dutsc
från mappenbuildandreleasetask
.
task.json komponenter
Se följande beskrivningar av några av komponenterna i task.json
filen.
Egendom | beskrivning |
---|---|
id |
Ett unikt GUID för din uppgift. |
name |
Namn utan blanksteg. |
friendlyName |
Beskrivande namn (mellanslag är tillåtet). |
description |
Detaljerad beskrivning av vad din uppgift gör. |
author |
Kort sträng som beskriver entiteten som utvecklar bygg- eller versionsuppgiften, till exempel: Microsoft Corporation |
instanceNameFormat |
Så här visas uppgiften i steglistan build/release. Du kan använda variabelvärden med hjälp av $(variablename). |
groups |
Beskriver den logiska gruppering av aktivitetsegenskaper i användargränssnittet. |
inputs |
Indata som ska användas när bygg- eller versionsaktiviteten körs. Den här uppgiften förväntar sig en indata med namnet samplestring. |
execution |
Det finns flera exekveringsalternativ för den här uppgiften, inklusive skript, som Node , PowerShell , PowerShell3 eller Process . |
restrictions |
Begränsningar som tillämpas på uppgiften om GitHub Codespaces-kommandon som aktiviteten kan anropa och variabler som aktiviteten kan ange. Vi rekommenderar att du anger begränsningsläge för nya uppgifter. |
Anmärkning
Skapa ett id
med följande kommando i PowerShell:
(New-Guid).Guid
Mer information finns i aktivitetsreferensen Build/release.
Kör uppgiften
Kör uppgiften med hjälp node index.js
av från PowerShell.
I följande exempel misslyckas uppgiften eftersom indata inte angavs (samplestring
är en obligatorisk indata).
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
Som en korrigering anger du samplestring
indata och kör uppgiften igen.
$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
Den här gången lyckas uppgiften eftersom samplestring
den har angetts, och den matar ut Hello Human på rätt sätt!
Tips
Information om olika aktivitetslöpare och hur du inkluderar den senaste nodversionen i finns i task.json
Uppdateringsvägledning för Node runner för Azure Pipelines-aktivitetsförfattare.
2. Enhetstesta dina skript för uppgifter
Gör enhetstester för att snabbt testa aktivitetsskriptet och inte de externa verktyg som anropas. Testa alla aspekter av både lyckade och misslyckade förlopp.
Installera testverktyg. Vi använder Mocha som testdrivrutin i den här proceduren.
npm install mocha --save-dev -g npm install sync-request --save-dev npm install @types/mocha --save-dev
Skapa en
tests
mapp som innehåller en_suite.ts
fil med följande innehåll: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 }); });
Tips
Testmappen ska finnas i
buildandreleasetask
-mappen. Om du får ett fel med synkroniseringsbegäran kan du kringgå det genom att lägga till synkroniseringsbegäran ibuildandreleasetask
mappen med kommandotnpm i --save-dev sync-request
.Skapa en
success.ts
fil i testkatalogen med följande innehåll. Det här skapandet av filen simulerar körning av uppgiften och imiterar alla anrop till externa metoder.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();
Lyckat test verifierar att det, med lämpliga indata, lyckas utan fel eller varningar och returnerar rätt utdata.
För att köra task mock runner, lägg till följande exempel på ett lyckat test i din
_suite.ts
-fil.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 }); });
Skapa en
failure.ts
-fil i din testkatalog som en mock runner för uppgiften med följande innehåll: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();
Feltestet verifierar att när verktyget får felaktiga eller ofullständiga indata misslyckas det på det förväntade sättet med användbara utdata.
För att köra task mock runner, lägg till följande kod i din
_suite.ts
fil.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(); }); });
Kör testerna.
tsc mocha tests/_suite.js
Båda testerna bör klara sig. Om du vill köra testerna med mer utförliga utdata (vad du skulle se i byggkonsolen) anger du miljövariabeln:
TASK_TEST_TRACE=1
.$env:TASK_TEST_TRACE=1
3. Skapa tilläggsmanifestfilen
Tilläggsmanifestet innehåller all information om tillägget. Den innehåller länkar till dina filer, inklusive dina uppgiftsmappar och bildmappar. Se till att du har skapat en mapp för bilder med extension-icon.png
. Följande exempel är ett tilläggsmanifest som innehåller bygg- eller versionsuppgiften.
Kopiera följande .json kod och spara den som din vss-extension.json
fil i katalogen home
.
Skapa inte den här filen i mappen buildandreleasetask.
{
"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"
}
}
]
}
Anmärkning
Ändra utgivaren till ditt utgivarnamn. Mer information finns i Skapa en utgivare.
Bidrag
Egendom | beskrivning |
---|---|
id |
Identifierare för bidraget. Måste vara unikt inom tillägget. Behöver inte matcha namnet på bygg- eller versionsuppgiften. Vanligtvis finns namnet på bygg- eller versionsaktiviteten i ID:t för bidraget. |
type |
Typ av bidrag. Ska vara ms.vss-distributed-task.task . |
targets |
Bidrag som detta bidrag riktar sig till. Ska vara ms.vss-distributed-task.tasks . |
properties.name |
Namnet på uppgiften. Det här namnet måste matcha mappnamnet för motsvarande fristående bygg- eller versionspipelineuppgift. |
Filer
Egendom | beskrivning |
---|---|
path |
Sökväg till filen eller mappen i förhållande till home katalogen. |
Mer information om tilläggsmanifestfilen, till exempel dess egenskaper och vad de gör, finns i referensen för tilläggsmanifestet.
4. Paketera tillägget
Paketera alla dina filer för att få ditt tillägg till Visual Studio Marketplace. Alla tillägg paketeras som VSIX 2.0-kompatibla .vsix-filer. Microsoft tillhandahåller ett plattformsoberoende kommandoradsgränssnitt (CLI) för att paketera tillägget.
När du har tfx-cli går du till tilläggets hemkatalog och kör följande kommando:
tfx extension create --manifest-globs vss-extension.json
Anmärkning
Ett tillägg eller en integrerings version måste ökas vid varje uppdatering.
När du uppdaterar ett befintligt tillägg, uppdaterar du antingen versionen i manifestet eller använder kommandoradsväxeln --rev-version
. Detta ökar uppdateringsversionsnumret för tillägget och sparar den nya versionen i manifestet.
Du måste uppdatera både uppgiftsversionen och tilläggsversionen för att uppdateringen ska ske.
tfx extension create --manifest-globs vss-extension.json --rev-version
uppdaterar endast tilläggsversionen och inte uppgiftsversionen. Mer information finns i Skapa uppgift i GitHub.
När det paketerade tillägget finns i en .vsix-fil är du redo att publicera tillägget på Marketplace.
5. Publicera tillägget
Om du vill publicera tillägget skapar du först utgivaren, laddar upp tillägget och delar det slutligen.
Skapa utgivaren
Alla tillägg, inklusive tillägg från Microsoft, identifieras som tillhandahållna av en utgivare. Om du inte redan är medlem i en befintlig utgivare skapar du en.
Logga in på Visual Studio Marketplace-publiceringsportalen.
Om du inte redan är medlem i en befintlig utgivare uppmanas du att skapa en utgivare. Om du inte uppmanas att skapa en utgivare rullar du ned till slutet av sidan och väljer Publicera tillägg under Relaterade webbplatser.
- Ange en identifierare för utgivaren, till exempel:
mycompany-myteam
.- Den här identifieraren används som värde för
publisher
attributet i tilläggens manifestfil.
- Den här identifieraren används som värde för
- Ange ett visningsnamn för utgivaren, till exempel:
My Team
.
- Ange en identifierare för utgivaren, till exempel:
Granska avtalet för utgivare på Marketplace och välj Skapa.
Utgivaren har definierats. I en framtida version kan du bevilja behörighet att visa och hantera utgivarens tillägg. Det är enklare och säkrare att publicera tillägg under en gemensam utgivare, utan att behöva dela en uppsättning autentiseringsuppgifter mellan användare.
Ladda upp tillägget
Leta upp knappen Ladda upp nytt tillägg, gå till den paketerade .vsix-filen och välj Ladda upp.
Du kan också ladda upp ditt tillägg via kommandoradsgränssnittet (CLI) genom att använda tfx extension publish
-kommandot istället för tfx extension create
för att paketera och publicera ditt tillägg i ett steg. Du kan också använda --share-with
för att dela tillägget med ett eller flera konton när det har publicerats.
tfx extension publish --manifest-globs your-manifest.json --share-with yourOrganization
Dela ditt tillägg
Nu när du har laddat upp tillägget finns det på Marketplace, men ingen kan se det. Dela den med din organisation så att du kan installera och testa den.
Högerklicka på tillägget och välj Dela och ange organisationsinformation. Du kan dela det med andra konton som du vill ha åtkomst till ditt tillägg också.
Viktigt!
Utgivare måste verifieras för att dela tillägg offentligt. Mer information finns i Paket/Publicera/Installera.
När tillägget har delats på Marketplace måste alla som vill använda det installera det.
6. Skapa en bygg- och versionspipeline för att publicera tillägget på Marketplace
Om du vill underhålla den anpassade uppgiften på Marketplace skapar du en bygg- och versionspipeline i Azure DevOps.
Krav för publicering
Ett Azure DevOps-projekt. Skapa ett projekt.
Azure DevOps Extension Tasks-tillägg. Installera det kostnadsfritt i din organisation.
Variabelgrupp för pipelinebibliotek. Skapa en pipelinebiblioteksvariabelgrupp för att lagra variablerna som används av pipelinen. Mer information finns i Lägga till och använda variabelgrupper. Du kan skapa variabelgrupper från fliken Azure DevOps-bibliotek eller via CLI. Använd variablerna i den här gruppen i din pipeline. Deklarera även följande variabler i variabelgruppen:
-
publisherId
: ID för marketplace-utgivaren -
extensionId
: ID för ditt tillägg som angivet i filen vss-extension.json -
extensionName
: Namnet på tillägget enligt vss-extension.json-filen -
artifactName
: Namnet på artefakten som skapas för VSIX-filen
-
Tjänstanslutning. Skapa en ny Marketplace-tjänstanslutning och bevilja åtkomstbehörigheter för alla pipelines.
YAML-pipeline. Använd följande exempel för att skapa en ny pipeline med YAML. Mer information finns i Skapa din första pipeline och YAML-schema.
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'
Mer information finns i Ange händelser som utlöser pipelines.
Anmärkning
Varje jobb använder en ny användaragent och kräver att beroenden installeras.
Steg i pipelines
Följande avsnitt hjälper dig att förstå hur pipelinestegen fungerar.
Steg 1: Köra och publicera enhetstester
Det här steget kör enhetstester och publicerar testresultat till Azure DevOps.
Om du vill köra enhetstester lägger du till ett anpassat skript i package.json
filen som i följande exempel.
"scripts": {
"testScript": "mocha ./TestFile --reporter xunit --reporter-option output=ResultsFile.xml"
},
Lägg till Använd Node CLI för Azure DevOps (tfx-cli) för att installera tfx-cli på byggagenten.
Lägg till uppgiften
npm
medinstall
kommandot och rikta mot mappen medpackage.json
filen.Lägg till uppgiften
Bash
för att kompilera TypeScript till JavaScript.npm
Lägg till uppgiften medcustom
kommandot, rikta in mappen som innehåller enhetstesterna och ange somtestScript
kommando. Använd följande indata:- Kommando:
custom
- Arbetsmapp som innehåller package.json:
/TestsDirectory
- Kommando och argument:
testScript
- Kommando:
Lägg till aktiviteten Publicera testresultat . Om du använder Mocha XUnit-reportern kontrollerar du att resultatformatet är
JUnit
och inteXUnit
. Ange sökmappen som rotkatalogen. Använd följande indata:- Testresultatformat:
JUnit
- Testresultatfiler:
**/ResultsFile.xml
- Sökmapp:
$(System.DefaultWorkingDirectory)
När testresultaten har publicerats bör utdata under testfliken se ut som i följande exempel.
- Testresultatformat:
Steg 2: Paketera tillägget och publicera byggartefakter
Lägg till Använd Node CLI för Azure DevOps (tfx-cli) för att installera tfx-cli på byggagenten.
Lägg till uppgiften
npm
medinstall
kommandot och rikta mot mappen medpackage.json
filen.Lägg till uppgiften
Bash
för att kompilera TypeScript till JavaScript.Om du vill fråga efter den befintliga versionen, lägg till uppgiften Utökning av frågeversion och använd följande inmatningsdata:
- Anslut till: Visual Studio Marketplace
- Visual Studio Marketplace (tjänstanslutning): Tjänstanslutning
- Utgivar-ID: ID för din Visual Studio Marketplace-utgivare
- Tilläggs-ID: ID för tillägget i
vss-extension.json
filen - Uppdatera version: Patch
- Utdatavariabel:
Task.Extension.Version
Om du vill paketera tilläggen baserat på manifest-Json lägger du till aktiviteten Pakettillägg med hjälp av följande indata:
- Rotmanifestmapp: Pekar på rotkatalogen som innehåller manifestfilen. Är till exempel
$(System.DefaultWorkingDirectory)
rotkatalogen - Manifestfil:
vss-extension.json
- Utgivar-ID: ID för din Visual Studio Marketplace-utgivare
- Tilläggs-ID: ID för tillägget i
vss-extension.json
filen - Tilläggsnamn: Namnet på tillägget i
vss-extension.json
filen - Tilläggsversion:
$(Task.Extension.Version)
- Åsidosätt uppgiftens version: markerad som (sant)
- Åsidosättningstyp: Ersätt endast ändringsfil (1.0.r)
- Synlighet för tillägg: Om tillägget fortfarande är under utveckling anger du värdet till privat. Om du vill frigöra tillägget till allmänheten anger du värdet som offentligt.
- Rotmanifestmapp: Pekar på rotkatalogen som innehåller manifestfilen. Är till exempel
Om du vill kopiera till publicerade filer lägger du till aktiviteten Kopiera filer med hjälp av följande indata:
- Innehåll: Alla filer som ska kopieras för att publicera dem som en artefakt
- Målmapp: Mappen som filerna kopieras till
- Till exempel:
$(Build.ArtifactStagingDirectory)
- Till exempel:
Lägg till Publicera kompileringsartefakter för att publicera artefakterna för användning i andra jobb eller pipelines. Använd följande indata:
- Sökväg att publicera: Sökvägen till mappen som innehåller de filer som publiceras
- Till exempel:
$(Build.ArtifactStagingDirectory)
- Till exempel:
- Artefaktnamn: Namnet på artefakten
- Publiceringsplats för artefakter: Välj Azure Pipelines för att använda artefakten i framtida jobb
- Sökväg att publicera: Sökvägen till mappen som innehåller de filer som publiceras
Steg 3: Ladda ned byggartefakter och publicera tillägget
Om du vill installera tfx-cli på byggagenten lägger du till Använd Node CLI för Azure DevOps (tfx-cli).
Om du vill ladda ned artefakterna till ett nytt jobb lägger du till uppgiften Ladda ned byggartefakter med hjälp av följande indata:
- Ladda ned artefakter som skapats av: Om du laddar ned artefakten på ett nytt jobb från samma pipeline väljer du Aktuell version. Om du laddar ned på en ny pipeline väljer du Specifik version
- Nedladdningstyp: Välj Specifik artefakt för att ladda ned alla filer som har publicerats.
- Artefaktnamn: Den publicerade artefaktens namn
- Målkatalog: Mappen där filerna ska laddas ned
Använd följande indata för att hämta uppgiften Publicera tillägg :
- Anslut till: Visual Studio Marketplace
- Anslutning till Visual Studio Marketplace: ServiceConnection
- Indatafiltyp: VSIX-fil
- VSIX-fil:
/Publisher.*.vsix
- Utgivar-ID: ID för din Visual Studio Marketplace-utgivare
- Tilläggs-ID: ID för tillägget i
vss-extension.json
filen - Tilläggsnamn: Namnet på tillägget i
vss-extension.json
filen - Tilläggssynlighet: Antingen privat eller offentlig
Valfritt: Installera och testa tillägget
Installera ett tillägg som delas med dig i bara några få steg:
- Gå till administrationssidan för projektsamlingen från organisationens kontrollpanel (
https://dev.azure.com/{organization}/_admin
). - På fliken Tillägg letar du reda på tillägget i gruppen Tillägg som delas med mig och väljer tilläggslänken .
- Installera tillägget.
Om du inte kan se fliken Tillägg kontrollerar du att du är på kontrollpanelen (administrationssidan på projektsamlingsnivå) https://dev.azure.com/{organization}/_admin
och inte på administrationssidan för ett projekt.
Om du inte ser fliken Tillägg aktiveras inte tillägg för din organisation. Du kan få tidig åtkomst till tilläggsfunktionen genom att gå med i Visual Studio Partner Program.
Om du vill paketera och publicera Azure DevOps-tillägg på Visual Studio Marketplace kan du ladda ned Azure DevOps-tilläggsuppgifter.
Vanliga frågor
Se följande vanliga frågor och svar om hur du lägger till anpassade bygg- eller versionsaktiviteter i tillägg för Azure DevOps.
F: Hur kan jag begränsa användningen av Azure Pipelines-kommandon för uppgiften?
Du kan begränsa användning och variabler för Azure Pipelines-kommandon, som anges efter uppgift.
Den här åtgärden kan vara användbar för att förhindra obegränsad åtkomst till variabler eller vso-kommandon för anpassade skript som aktiviteten kör. Vi rekommenderar att du konfigurerar det för nya uppgifter.
För att ansöka kan du behöva lägga till följande instruktion i filen task.json
:
"restrictions": {
"commands": {
"mode": "restricted"
},
"settableVariables": {
"allowed": ["variable1", "test*"]
}
}
Om restricted
värdet har angetts för mode
, kan du bara köra följande kommandon efter uppgiftens:
logdetail
logissue
complete
setprogress
setsecret
setvariable
debug
settaskvariable
prependpath
publish
Med settableVariables
begränsningarna kan du skicka in en lista över variabler som anges av setvariable
eller prependpath
kommandon. Det tillåter också grundläggande reguljära uttryck. Om din allowlist till exempel var: ['abc', 'test*']
, anger abc
, test
eller test1
som variabler med något värde eller väntar på dem till sökvägen skulle det lyckas, men om du försöker ange en variabelproxy varnar den. Tom lista innebär att inga variabler ändras per aktivitet.
Om antingen settableVariables
nyckeln eller commands
utelämnas tillämpas inte relevant begränsning.
Begränsningsfunktionen är tillgänglig från agentversion 2.182.1.
F: Hur hanteras avbrytssignalen av en uppgift?
Pipelineagenten skickar SIGINT
och SIGTERM
signaler till dess relevanta underordnade process. Det finns inga explicita metoder i aktivitetsbiblioteket att bearbeta. Mer information finns i Avbryta agentjobb.
F: Hur tar jag bort uppgiften från projektsamlingen?
Vi stöder inte automatisk borttagning av uppgifter. Automatisk borttagning är inte säker och bryter befintliga processkedjor som redan använder sig av sådana processer. Men du kan markera aktiviteter som inaktuella. För att göra så uppdaterar du uppgiftsversionen och markerar uppgiften som föråldrad.
F: Hur kan jag uppgradera min anpassade uppgift till den senaste noden?
Vi rekommenderar att du uppgraderar till den senaste Node-versionen. Mer information finns i Uppgradera aktiviteter till Nod 20.
Microsoft Hosted-agenter och olika Versioner av Azure DevOps Server har olika livscykel, vilket leder till att olika Node-löparversioner installeras beroende på var en uppgift körs. För att säkerställa kompatibilitet mellan agenter med olika versioner av Node runner task.json
kan filen innehålla flera exekveringsavsnitt. I följande exempel använder Azure Pipeline-agenter med Node 20-löparen den som standard, medan agenter utan den återgår till Node 10-implementeringen.
"execution": {
"Node10": {
"target": "bash.js",
"argumentFormat": ""
},
"Node20_1": {
"target": "bash.js",
"argumentFormat": ""
}
}
Så här uppgraderar du dina uppgifter:
För att se till att koden fungerar som förväntat testar du dina uppgifter på de olika Node Runner-versionerna.
I körningsavsnittet för aktiviteten uppdaterar du från
Node
ellerNode10
tillNode16
ellerNode20
.Om du vill ha stöd för äldre serverversioner bör du lämna
Node
/Node10
målet. Äldre Versioner av Azure DevOps Server kanske inte har den senaste Node Runner-versionen inkluderad.Du kan välja att dela den startpunkt som definierats i målet eller ha mål optimerade för den nodversion som används.
"execution": { "Node10": { "target": "bash10.js", "argumentFormat": "" }, "Node16": { "target": "bash16.js", "argumentFormat": "" }, "Node20_1": { "target": "bash20.js", "argumentFormat": "" } }
Viktigt!
Om du inte lägger till stöd för Node 20-exekveraren till dina anpassade uppgifter misslyckas de på agenter som är installerade från release-feeden.