JavaScript aanpassen voor Azure Pipelines
U kunt Azure Pipelines gebruiken om uw JavaScript-apps te bouwen zonder dat u een eigen infrastructuur hoeft in te stellen. Hulpprogramma's die u vaak gebruikt voor het bouwen, testen en uitvoeren van JavaScript-apps, zoals npm, Node, Yarn en Gulp, worden vooraf geïnstalleerd op door Microsoft gehoste agents in Azure Pipelines.
Raadpleeg voor de versie van Node.js en npm die vooraf is geïnstalleerd, naar door Microsoft gehoste agents. Als u een specifieke versie van deze hulpprogramma's wilt installeren op door Microsoft gehoste agents, voegt u de taak Node Tool Installer toe aan het begin van uw proces. U kunt ook een zelf-hostende agent gebruiken.
Als u uw eerste pijplijn wilt maken met JavaScript, raadpleegt u de quickstart voor JavaScript.
Een specifieke versie van Node.js gebruiken
Als u een versie van Node.js en npm nodig hebt die nog niet is geïnstalleerd op de door Microsoft gehoste agent, gebruikt u de taak voor het installatieprogramma van het knooppuntprogramma. Voeg het volgende fragment toe aan uw azure-pipelines.yml
bestand.
Notitie
De gehoste agents worden regelmatig bijgewerkt en het instellen van deze taak resulteert in aanzienlijke tijd bijwerken naar een nieuwere secundaire versie telkens wanneer de pijplijn wordt uitgevoerd. Gebruik deze taak alleen als u een specifieke knooppuntversie in uw pijplijn nodig hebt.
- task: UseNode@1
inputs:
version: '16.x' # replace this value with the version that you need for your project
Als u een versie van Node.js/npm nodig hebt die nog niet op de agent is geïnstalleerd:
Selecteer taken in de pijplijn, kies de fase waarmee uw buildtaken worden uitgevoerd en selecteer + vervolgens om een nieuwe taak aan die fase toe te voegen.
Zoek en voeg in de taakcatalogus de taak Node Tool Installer toe.
Selecteer de taak en geef de versie op van de Node.js runtime die u wilt installeren.
Als u alleen het npm-hulpprogramma wilt bijwerken, voert u de npm i -g npm@version-number
opdracht uit in het buildproces.
Meerdere knooppuntversies gebruiken
U kunt uw app bouwen en testen op meerdere versies van Node met de taak voor het installatieprogramma van het knooppuntprogramma.
pool:
vmImage: 'ubuntu-latest'
strategy:
matrix:
node_16_x:
node_version: 16.x
node_13_x:
node_version: 18.x
steps:
- task: UseNode@1
inputs:
version: $(node_version)
- script: npm install
Bekijk de uitvoering van meerdere configuraties.
Hulpprogramma's installeren op uw buildagent
Als u hulpprogramma's hebt die afhankelijkheden voor ontwikkeling in uw project package.json
of package-lock.json
bestand zijn, installeert u uw hulpprogramma's en afhankelijkheden via npm. De exacte versie van de hulpprogramma's wordt gedefinieerd in het project, geïsoleerd van andere versies die aanwezig zijn op de buildagent.
Gebruik een script of de npm-taak.
Een script gebruiken om te installeren met package.json
- script: npm install --only=dev
Gebruik de npm-taak om te installeren met package.json
- task: Npm@1
inputs:
command: 'install'
Voer hulpprogramma's uit die op deze manier zijn geïnstalleerd met behulp van de npm-pakketrunner npx
, waarmee hulpprogramma's worden gedetecteerd die op deze manier zijn geïnstalleerd in de padresolutie. In het volgende voorbeeld wordt de mocha
testrunner aanroepen, maar wordt gezocht naar de versie die is geïnstalleerd als een ontwikkelingsafhankelijkheid voordat u een wereldwijd geïnstalleerde (via npm install -g
) versie gebruikt.
- script: npx mocha
Als u hulpprogramma's wilt installeren die uw project nodig heeft, maar die niet zijn ingesteld als ontwikkelingsafhankelijkheden, package.json
roept npm install -g
u aan vanuit een scriptfase in uw pijplijn.
In het volgende voorbeeld wordt de nieuwste versie van de Angular CLI geïnstalleerd met behulp van npm
. De rest van de pijplijn kan vervolgens het ng
hulpprogramma uit andere script
fasen gebruiken.
Notitie
Op door Microsoft gehoste Linux-agents voert u de opdracht vooraf met sudo
, zoals sudo npm install -g
.
- script: npm install -g @angular/cli
Tip
Deze taken worden uitgevoerd telkens wanneer uw pijplijn wordt uitgevoerd, dus houd rekening met de impact die het installeren van hulpprogramma's heeft op buildtijden. Overweeg om zelf-hostende agents te configureren met de versie van de hulpprogramma's die u nodig hebt als overhead een ernstige invloed heeft op uw buildprestaties.
Gebruik de npm - of opdrachtregeltaken in uw pijplijn om hulpprogramma's op uw buildagent te installeren.
Afhankelijkheden beheren
Gebruik Yarn of Azure Artifacts in uw build om pakketten te downloaden uit het openbare NPM-register. Dit register is een type privé-NPM-register dat u in het .npmrc
bestand opgeeft.
NPM gebruiken
U kunt npm op de volgende manieren gebruiken om pakketten voor uw build te downloaden:
- Rechtstreeks uitvoeren
npm install
in uw pijplijn, omdat het de eenvoudigste manier is om pakketten te downloaden uit een register zonder verificatie. Als uw build geen ontwikkelingsafhankelijkheden van de agent nodig heeft om uit te voeren, kunt u buildtijden versnellen met de--only=prod
optie omnpm install
. - Gebruik een npm-taak. Deze taak is handig wanneer u een geverifieerd register gebruikt.
- Gebruik een npm-verificatietaak. Deze taak is handig wanneer u vanuit uw taaklopers - Gulp, Grunt of Maven uitvoert
npm install
.
Als u een NPM-register wilt opgeven, plaatst u de URL's in een .npmrc
bestand in uw opslagplaats.
Als uw feed wordt geverifieerd, maakt u een npm-serviceverbinding op het tabblad Services in Project-instellingen om de referenties te beheren.
Als u npm-pakketten wilt installeren met een script in uw pijplijn, voegt u het volgende codefragment toe aan azure-pipelines.yml
.
- script: npm install
Als u een privéregister wilt gebruiken dat is opgegeven in uw .npmrc
bestand, voegt u het volgende fragment toe aan azure-pipelines.yml
.
- task: Npm@1
inputs:
customEndpoint: <Name of npm service connection>
Als u registerreferenties wilt doorgeven aan npm-opdrachten via taaklopers zoals Gulp, voegt u de volgende taak toe aan azure-pipelines.yml
voordat u de taakloper aanroept.
- task: npmAuthenticate@0
inputs:
customEndpoint: <Name of npm service connection>
Gebruik de npm - of npm-verificatietaak in uw pijplijn om pakketten te downloaden en te installeren.
Als uw builds af en toe mislukken vanwege verbindingsproblemen wanneer u pakketten herstelt vanuit het npm-register, kunt u Azure Artifacts gebruiken met upstream-bronnen en de pakketten in de cache opslaan. De referenties van de pijplijn worden automatisch gebruikt wanneer u verbinding maakt met Azure Artifacts. Deze referenties zijn doorgaans afgeleid van het Project Collection Build Service-account .
Als u door Microsoft gehoste agents gebruikt, krijgt u elke keer dat u een build uitvoert een nieuwe machine. Dit betekent dat u de afhankelijkheden elke keer herstelt, wat een aanzienlijke hoeveelheid tijd kan duren. Om dit te verhelpen, kunt u Azure Artifacts of een zelf-hostende agent gebruiken. Vervolgens krijgt u het voordeel van het gebruik van de pakketcache.
Yarn gebruiken
Gebruik een scriptfase om Yarn aan te roepen om afhankelijkheden te herstellen. Yarn wordt vooraf geïnstalleerd op sommige door Microsoft gehoste agents. U kunt deze installeren en configureren op zelf-hostende agents zoals elk ander hulpprogramma.
- script: yarn install
Gebruik de CLI- of Bash-taak in uw pijplijn om Yarn aan te roepen.
JavaScript-compilers uitvoeren
Gebruik compilers zoals Babel en de TypeScript-compiler tsc
om uw broncode te converteren naar versies die kunnen worden gebruikt door de Node.js runtime of in webbrowsers.
Als u een scriptobject hebt ingesteld in uw projectbestand package.json
waarmee de compiler wordt uitgevoerd, roept u het aan in uw pijplijn met behulp van een scripttaak.
- script: npm run compile
U kunt compilers rechtstreeks vanuit de pijplijn aanroepen met behulp van de scripttaak. Deze opdrachten worden uitgevoerd vanuit de hoofdmap van de gekloonde opslagplaats voor broncode.
- script: tsc --target ES6 --strict true --project tsconfigs/production.json
Gebruik de npm-taak in uw pijplijn als u een compileerscript hebt gedefinieerd in uw project package.json om de code te bouwen. Gebruik de Bash-taak om uw code te compileren als u geen afzonderlijk script hebt gedefinieerd in de projectconfiguratie.
Eenheidstests uitvoeren
Configureer uw pijplijnen om uw JavaScript-tests uit te voeren, zodat ze resultaten produceren die zijn opgemaakt in de JUnit XML-indeling. Vervolgens kunt u de resultaten publiceren met behulp van de ingebouwde taak voor het publiceren van testresultaten .
Als uw testframework geen ondersteuning biedt voor JUnit-uitvoer, voegt u ondersteuning toe via een partnerrapportagemodule, zoals mocha-junit-reporter. U kunt uw testscript bijwerken om de JUnit reporter te gebruiken, of als de rapportgever opdrachtregelopties ondersteunt, geeft u deze opties door aan de taakdefinitie.
De volgende tabel bevat de meest gebruikte testlopers en de reporters die kunnen worden gebruikt om XML-resultaten te produceren:
Testloper | Reporters voor het produceren van XML-rapporten |
---|---|
Mokka | mocha-junit-reporter cypress-multi-reporters |
jasmijn | jasmine-reporters |
schertsen | jest-junit jest-junit-reporter |
karma | karma-junit-reporter |
Ava | tap-xunit |
In het volgende voorbeeld wordt de mocha-junit-reporter gebruikt en wordt deze rechtstreeks aangeroepen mocha test
met behulp van een script. Dit script produceert de JUnit XML-uitvoer op de standaardlocatie van ./test-results.xml
.
- script: mocha test --reporter mocha-junit-reporter
Als u een test
script in uw project package.json-bestand hebt gedefinieerd, kunt u het aanroepen met behulp van npm test
.
- script: npm test
Testresultaten publiceren
Als u de resultaten wilt publiceren, gebruikt u de taak Testresultaten publiceren.
- task: PublishTestResults@2
condition: succeededOrFailed()
inputs:
testRunner: JUnit
testResultsFiles: '**/test-results.xml'
Resultaten van codedekking publiceren
Als uw testscripts een hulpprogramma voor codedekking uitvoeren, zoals Istanbul, voegt u de taak Publicatiecodedekkingsresultaten toe. Wanneer u dit doet, kunt u metrische gegevens over dekking vinden in de samenvatting van de build en HTML-rapporten downloaden voor verdere analyse. De taak verwacht cobertura- of JaCoCo-rapportage-uitvoer, dus zorg ervoor dat uw hulpprogramma voor codedekking wordt uitgevoerd met de benodigde opties om de juiste uitvoer te genereren. Bijvoorbeeld: --report cobertura
.
In het volgende voorbeeld wordt nyc, de opdrachtregelinterface van Istanbul, samen met mocha-junit-reporter gebruikt en wordt de opdracht aangeroepen npm test
.
- script: |
nyc --reporter=cobertura --reporter=html \
npm test -- --reporter mocha-junit-reporter --reporter-options mochaFile=./test-results.xml
displayName: 'Build code coverage report'
- task: PublishCodeCoverageResults@2
inputs:
summaryFileLocation: '$(System.DefaultWorkingDirectory)/**/*coverage.xml'
Gebruik de taken Testresultaten publiceren en Codedekkingsresultaten publiceren in uw pijplijn om testresultaten samen met codedekkingsresultaten te publiceren met behulp van Istanbul.
Stel de besturingsopties voor de taak Testresultaten publiceren in om de taak uit te voeren, zelfs als een vorige taak is mislukt, tenzij de implementatie is geannuleerd.
End-to-end-browser testen
Voer tests uit in headless browsers als onderdeel van uw pijplijn met hulpprogramma's zoals Protractor of Karma. Publiceer vervolgens de resultaten voor de build naar Azure DevOps met de volgende stappen:
- Installeer een headless browserteststuurprogramma, zoals headless Chrome of Firefox, of een browsersimuleerde tool zoals PhantomJS, op de buildagent.
- Configureer uw testframework om de optie headless browser/stuurprogramma van uw keuze te gebruiken volgens de documentatie van het hulpprogramma.
- Configureer uw testframework (meestal met een invoegtoepassing of configuratie van een reporter) om testresultaten met JUnit-indeling uit te voeren.
- Stel een scripttaak in om CLI-opdrachten uit te voeren die nodig zijn om de headless browserexemplaren te starten.
- Voer de end-to-end-tests uit in de pijplijnfasen, samen met uw eenheidstests.
- Publiceer de resultaten met behulp van dezelfde taak Testresultaten publiceren naast uw eenheidstests.
Web-apps verpakken
Pakkettoepassingen om al uw toepassingsmodules te bundelen met tussenliggende uitvoer en afhankelijkheden in statische assets die gereed zijn voor implementatie. Voeg een pijplijnfase toe na uw compilatie en tests om een hulpprogramma zoals webpack of ng-build uit te voeren met behulp van de Angular CLI.
In het eerste voorbeeld wordt aanroepen webpack
. Als u dit wilt doen, moet u ervoor zorgen dat webpack
deze is geconfigureerd als een ontwikkelingsafhankelijkheid in uw package.json projectbestand. Dit wordt uitgevoerd webpack
met de standaardconfiguratie, tenzij u een webpack.config.js
bestand in de hoofdmap van uw project hebt.
- script: webpack
In het volgende voorbeeld wordt de npm-taak gebruikt om het build
scriptobject aan te roepen npm run build
dat is gedefinieerd in het project package.json. Als u scriptobjecten in uw project gebruikt, wordt de logica voor de build verplaatst naar de broncode en uit de pijplijn.
- script: npm run build
Gebruik de CLI - of Bash-taak in uw pijplijn om uw verpakkingshulpprogramma aan te roepen, zoals webpack
Angular ng build
.
JavaScript-frameworks implementeren
Angular
Voor Angular-apps kunt u Angular-specifieke opdrachten opnemen, zoals ng-test, ng build en ng e2e. Als u Angular CLI-opdrachten in uw pijplijn wilt gebruiken, installeert u het angular/cli npm-pakket op de buildagent.
Notitie
Op door Microsoft gehoste Linux-agents voert u de opdracht vooraf met sudo
, zoals sudo npm install -g
.
- script: |
npm install -g @angular/cli
npm install
ng build --prod
Voeg de volgende taken toe aan uw pijplijn:
npm
- Opdracht:
custom
- Opdracht en argumenten:
install -g @angular/cli
- Opdracht:
npm
- Opdracht:
install
- Opdracht:
bash
- Type:
inline
- Script:
ng build --prod
- Type:
Voor tests in uw pijplijn waarvoor een browser moet worden uitgevoerd, zoals de ng-testopdracht in de starter-app, die Karma uitvoert, gebruikt u een headless browser in plaats van een standaardbrowser. In de Angular starter-app:
Wijzig de
browsers
vermelding in het karma.conf.js projectbestand vanbrowsers: ['Chrome']
inbrowsers: ['ChromeHeadless']
.Wijzig de
singleRun
vermelding in het karma.conf.js projectbestand van een waarde infalse
true
. Deze wijziging zorgt ervoor dat het Karma-proces stopt nadat het is uitgevoerd.
React en Vue
Alle afhankelijkheden voor uw React- en Vue-apps worden vastgelegd in uw package.json-bestand . Het azure-pipelines.yml-bestand bevat het standaardscript Node.js:
- script: |
npm install
displayName: 'npm install'
- script: |
npm run build
displayName: 'npm build'
De buildbestanden bevinden zich in een nieuwe map ( dist
voor Vue) of build
(voor React). Met dit fragment wordt een artefact gemaakt, www
dat gereed is voor release. Het maakt gebruik van het knooppuntinstallatieprogramma, het kopiëren van bestandenen het publiceren van buildartefactentaken.
trigger:
- main
pool:
vmImage: 'ubuntu-latest'
steps:
- task: UseNode@1
inputs:
version: '16.x'
displayName: 'Install Node.js'
- script: |
npm install
displayName: 'npm install'
- script: |
npm run build
displayName: 'npm build'
- task: CopyFiles@2
inputs:
Contents: 'build/**' # Pull the build directory (React)
TargetFolder: '$(Build.ArtifactStagingDirectory)'
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: $(Build.ArtifactStagingDirectory) # dist or build files
ArtifactName: 'www' # output artifact named www
Als u de release wilt vrijgeven, wijst u de releasetaak of het dist
artefact aan en gebruikt u de Azure Web App Deploy-taak.build
Webpack
U kunt een webpack-configuratiebestand gebruiken om een compiler, zoals Babel of TypeScript, op te geven om JSX of TypeScript te transpileren naar gewone JavaScript en om uw app te bundelen.
- script: |
npm install webpack webpack-cli --save-dev
npx webpack --config webpack.config.js
Voeg de volgende taken toe aan uw pijplijn:
npm
- Opdracht:
custom
- Opdracht en argumenten:
install -g webpack webpack-cli --save-dev
- Opdracht:
bash
- Type:
inline
- Script:
npx webpack --config webpack.config.js
- Type:
Taaklopers bouwen
Het is gebruikelijk om Gulp of Grunt te gebruiken als taakloper om een JavaScript-app te bouwen en te testen.
Slok
Gulp wordt vooraf geïnstalleerd op door Microsoft gehoste agents. Voer de gulp
opdracht uit in het YAML-bestand:
- script: gulp # include any additional options that are needed
Als voor de stappen in uw gulpfile.js-bestand verificatie is vereist met een NPM-register:
- task: npmAuthenticate@0
inputs:
customEndpoint: <Name of npm service connection>
- script: gulp # include any additional options that are needed
Voeg de taak Testresultaten publiceren toe om JUnit- of xUnit-testresultaten te publiceren op de server.
- task: PublishTestResults@2
inputs:
testResultsFiles: '**/TEST-RESULTS.xml'
testRunTitle: 'Test results for JavaScript using gulp'
Voeg de taak Publicatiecodedekkingsresultaten toe om resultaten van de codedekking naar de server te publiceren. U vindt metrische dekkingsgegevens in de samenvatting van de build en u kunt HTML-rapporten downloaden voor verdere analyse.
- task: PublishCodeCoverageResults@1
inputs:
codeCoverageTool: Cobertura
summaryFileLocation: '$(System.DefaultWorkingDirectory)/**/*coverage.xml'
reportDirectory: '$(System.DefaultWorkingDirectory)/**/coverage'
De eenvoudigste manier om een pijplijn te maken als uw app Gebruikmaakt van Gulp is het gebruik van de Node.js met een gulp-buildsjabloon wanneer u de pijplijn maakt. Met deze sjabloon worden automatisch verschillende taken toegevoegd om Gulp-opdrachten aan te roepen en artefacten te publiceren. Selecteer in de taak Codedekking inschakelen om codedekking in te schakelen met behulp van Istanbul.
Grunt
Grunt wordt vooraf geïnstalleerd op door Microsoft gehoste agents. Voer de grunt-opdracht uit in het YAML-bestand:
- script: grunt # include any additional options that are needed
Als voor de stappen in uw Gruntfile.js
bestand verificatie is vereist met een NPM-register:
- task: npmAuthenticate@0
inputs:
customEndpoint: <Name of npm service connection>
- script: grunt # include any additional options that are needed
De eenvoudigste manier om een pijplijn te maken als uw app Grunt gebruikt, is door de Node.js te gebruiken met Grunt-buildsjabloon wanneer u de pijplijn maakt. Hiermee worden automatisch verschillende taken toegevoegd om Gulp-opdrachten aan te roepen en artefacten te publiceren. Selecteer in de taak de optie Publiceren naar TFS/Team Services om testresultaten te publiceren en selecteer Codedekking inschakelen om codedekking in te schakelen met behulp van Istanbul.
Uw code verpakken en leveren
Nadat u uw app hebt gebouwd en getest, kunt u de build-uitvoer uploaden naar Azure Pipelines, een npm- of Maven-pakket maken en publiceren, of de build-uitvoer verpakken in een .zip-bestand voor implementatie naar een webtoepassing.
Bestanden publiceren naar Azure Pipelines
Als u de volledige werkmap met bestanden wilt uploaden, gebruikt u de taak BuildArtefacten publiceren en voegt u het volgende toe aan uw azure-pipelines.yml
bestand.
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(System.DefaultWorkingDirectory)'
Als u een subset van bestanden wilt uploaden, kopieert u eerst de benodigde bestanden uit de werkmap naar een faseringsmap met de taak Bestanden kopiëren en gebruikt u vervolgens de taak BuildArtefacten publiceren.
- task: CopyFiles@2
inputs:
SourceFolder: '$(System.DefaultWorkingDirectory)'
Contents: |
**\*.js
package.json
TargetFolder: '$(Build.ArtifactStagingDirectory)'
- task: PublishBuildArtifacts@1
Een module publiceren naar een NPM-register
Als de uitvoer van uw project een npm
module is voor gebruik door andere projecten en niet voor een webtoepassing, gebruikt u de npm-taak om de module te publiceren naar een lokaal register of naar het openbare NPM-register. Geef elke keer dat u publiceert een unieke naam/versiecombinatie op.
Voorbeelden
In het eerste voorbeeld wordt ervan uitgegaan dat u versiegegevens (zoals via een npm-versie) beheert via wijzigingen in uw package.json
bestand in versiebeheer. In het volgende voorbeeld wordt de scripttaak gebruikt om te publiceren naar het openbare register.
- script: npm publish
In het volgende voorbeeld wordt gepubliceerd naar een aangepast register dat is gedefinieerd in het bestand van .npmrc
uw opslagplaats. Stel een npm-serviceverbinding in om verificatiereferenties in de verbinding te injecteren terwijl de build wordt uitgevoerd.
- task: Npm@1
inputs:
command: publish
publishRegistry: useExternalRegistry
publishEndpoint: https://my.npmregistry.com
In het laatste voorbeeld wordt de module gepubliceerd naar een Azure DevOps Services-pakketbeheerfeed.
- task: Npm@1
inputs:
command: publish
publishRegistry: useFeed
publishFeed: https://my.npmregistry.com
Zie Npm-pakketten publiceren en hoe kan ik mijn npm-pakketten versieren als onderdeel van het buildproces voor meer informatie over versiebeheer en het publiceren van npm-pakketten.
Een web-app implementeren
Als u een .zip-bestandarchief wilt maken dat gereed is voor publicatie naar een web-app, gebruikt u de taak Archiefbestanden :
- task: ArchiveFiles@2
inputs:
rootFolderOrFile: '$(System.DefaultWorkingDirectory)'
includeRootFolder: false
Als u dit archief wilt publiceren naar een web-app, raadpleegt u de implementatie van de Azure-web-app.
Artefacten publiceren naar Azure Pipelines
Gebruik de taak BuildArtefacten publiceren om bestanden te publiceren vanuit uw build naar Azure Pipelines.
Publiceren naar een NPM-register
Gebruik de npm-taak om een npm-pakket te maken en te publiceren. Zie Npm-pakketten publiceren voor meer informatie over versiebeheer en het publiceren van npm-pakketten.
Een web-app implementeren
Als u een .zip bestandarchief wilt maken dat gereed is voor publicatie naar een web-app, gebruikt u de taak Archiefbestanden. Als u dit archief wilt publiceren naar een web-app, raadpleegt u de implementatie van Azure Web App.
Installatiekopieën bouwen en pushen naar het containerregister
Zodra de broncode is gebouwd en uw eenheidstests zijn uitgevoerd en geslaagd zijn, kunt u ook een installatiekopieën bouwen en naar een containerregister pushen.
Problemen oplossen
Als u uw project op uw ontwikkelcomputer kunt bouwen, maar problemen ondervindt met het bouwen ervan in Azure Pipelines, bekijkt u de volgende mogelijke oorzaken en corrigerende acties:
Controleer of de versies van Node.js en de taakloper op uw ontwikkelcomputer overeenkomen met de versies van de agent. U kunt opdrachtregelscripts, zoals
node --version
in uw pijplijn, opnemen om te controleren wat er op de agent is geïnstalleerd. Gebruik het installatieprogramma voor knooppunthulpprogramma's (zoals uitgelegd in deze richtlijnen) om dezelfde versie op de agent te implementeren of voernpm install
opdrachten uit om de gewenste versies bij te werken.Als uw builds af en toe mislukken tijdens het herstellen van pakketten, heeft het NPM-register problemen of zijn er netwerkproblemen tussen het Azure-datacenter en het register. We kunnen deze factoren niet beheersen. Ontdek of het gebruik van Azure Artifacts met een npm-register als upstream-bron de betrouwbaarheid van uw builds verbetert.
Als u
nvm
verschillende versies van Node.js beheert, kunt u in plaats daarvan overschakelen naar de taak Voor het installatieprogramma voor knooppunten. (nvm
is geïnstalleerd om historische redenen op de macOS-installatiekopieën.)nvm
beheert meerdere Node.js versies door shellaliassen toe te voegen en te wijzigenPATH
, wat slecht communiceert met de manier waarop Azure Pipelines elke taak in een nieuw proces uitvoert.De taak Node Tool Installer verwerkt dit model correct. Als voor uw werk echter het gebruik
nvm
is vereist, kunt u het volgende script toevoegen aan het begin van elke pijplijn:steps: - bash: | NODE_VERSION=16 # or whatever your preferred version is npm config delete prefix # avoid a warning . ${NVM_DIR}/nvm.sh nvm use ${NODE_VERSION} nvm alias default ${NODE_VERSION} VERSION_PATH="$(nvm_version_path ${NODE_VERSION})" echo "##vso[task.prependPath]$VERSION_PATH"
node
Vervolgens werken andere opdrachtregelprogramma's voor de rest van de pijplijntaak. In elke stap waarin u denvm
opdracht gebruikt, start u het script met de volgende code:- bash: | . ${NVM_DIR}/nvm.sh nvm <command>
Veelgestelde vragen
V: Waar vind ik meer informatie over Azure Artifacts en de Package Management-service?
A: Pakketbeheer in Azure Artifacts
V: Waar vind ik meer informatie over taken?
A: Build-, release- en testtaken
V: Hoe kan ik een pijplijnfout oplossen met het bericht 'FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory'?
A: Dit fouttype treedt op wanneer het Node.js pakket de limiet voor geheugengebruik overschrijdt. Als u het probleem wilt oplossen, voegt u een variabele zoals NODE_OPTIONS
toe en wijst u deze toe aan een waarde van --max_old_space_size=16384.
V: Hoe kan ik mijn npm-pakketten versien als onderdeel van het buildproces?
A: Een optie is het gebruik van een combinatie van versiebeheer en npm-versie. Aan het einde van een pijplijnuitvoering kunt u uw opslagplaats bijwerken met de nieuwe versie. In deze YAML is er een GitHub-opslagplaats en wordt het pakket geïmplementeerd in npmjs. Uw build mislukt als uw pakketversie niet overeenkomt met de pakketversie op npmjs en uw package.json
bestand.
variables:
MAP_NPMTOKEN: $(NPMTOKEN) # Mapping secret var
trigger:
- none
pool:
vmImage: 'ubuntu-latest'
steps: # Checking out connected repo
- checkout: self
persistCredentials: true
clean: true
- task: npmAuthenticate@0
inputs:
workingFile: .npmrc
customEndpoint: 'my-npm-connection'
- task: UseNode@1
inputs:
version: '16.x'
displayName: 'Install Node.js'
- script: |
npm install
displayName: 'npm install'
- script: |
npm pack
displayName: 'Package for release'
- bash: | # Grab the package version
v=`node -p "const p = require('./package.json'); p.version;"`
echo "##vso[task.setvariable variable=packageVersion]$v"
- task: CopyFiles@2
inputs:
contents: '*.tgz'
targetFolder: $(Build.ArtifactStagingDirectory)/npm
displayName: 'Copy archives to artifacts staging directory'
- task: CopyFiles@2
inputs:
sourceFolder: '$(Build.SourcesDirectory)'
contents: 'package.json'
targetFolder: $(Build.ArtifactStagingDirectory)/npm
displayName: 'Copy package.json'
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)/npm'
artifactName: npm
displayName: 'Publish npm artifact'
- script: | # Config can be set in .npmrc
npm config set //registry.npmjs.org/:_authToken=$(MAP_NPMTOKEN)
npm config set scope "@myscope"
# npm config list
# npm --version
npm version patch --force
npm publish --access public
- task: CmdLine@2 # Push changes to GitHub (substitute your repo)
inputs:
script: |
git config --global user.email "username@contoso.com"
git config --global user.name "Azure Pipeline"
git add package.json
git commit -a -m "Test Commit from Azure DevOps"
git push -u origin HEAD:main