Opdrachten voor logboekregistratie
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
Logboekregistratieopdrachten zijn de wijze waarop taken en scripts communiceren met de agent. Ze hebben betrekking op acties zoals het maken van nieuwe variabelen, het markeren van een stap als mislukt en het uploaden van artefacten. Logboekregistratieopdrachten zijn handig wanneer u problemen met een pijplijn wilt oplossen.
Belangrijk
We doen er alles aan om geheimen te maskeren van de uitvoer van Azure Pipelines, maar u moet nog steeds voorzorgsmaatregelen nemen. Echo geheimen nooit als uitvoer. Sommige besturingssystemen registreren opdrachtregelargumenten. Geef nooit geheimen door op de opdrachtregel. In plaats daarvan raden we u aan uw geheimen toe te wijzen aan omgevingsvariabelen.
We maskeren nooit subtekenreeksen van geheimen. Als 'abc123' bijvoorbeeld is ingesteld als geheim, wordt 'abc' niet gemaskeerd uit de logboeken. Dit is om te voorkomen dat geheimen te gedetailleerd worden gemaskeerd, waardoor de logboeken onleesbaar worden. Daarom mogen geheimen geen gestructureerde gegevens bevatten. Als bijvoorbeeld '{ 'foo': 'bar' }' is ingesteld als geheim, wordt 'balk' niet gemaskeerd uit de logboeken.
Type | Opdracht |
---|---|
Taakopdrachten | AddAttachment, Complete, LogDetail, LogIssue, PrependPath, SetEndpoint, SetProgress, SetVariable, SetSecret, UploadFile, UploadSummary |
Artefactopdrachten | Koppelen, uploaden |
Build-opdrachten | AddBuildTag, UpdateBuildNumber, UploadLog |
Releaseopdrachten | UpdateReleaseName |
Indeling van opdracht voor logboekregistratie
De algemene indeling voor een logboekregistratieopdracht is:
##vso[area.action property1=value;property2=value;...]message
Er zijn ook enkele opmaakopdrachten met een iets andere syntaxis:
##[command]message
Als u een logboekregistratieopdracht wilt aanroepen, echot u de opdracht via de standaarduitvoer.
#!/bin/bash
echo "##vso[task.setvariable variable=testvar;]testvalue"
Bestandspaden moeten worden opgegeven als absolute paden: geroot naar een station in Windows of beginnend met /
linux en macOS.
Notitie
Houd er rekening mee dat u de set -x
opdracht niet kunt gebruiken voordat u een logboekregistratieopdracht gebruikt wanneer u Linux of macOS gebruikt. Zie probleemoplossing voor meer informatie over het tijdelijk uitschakelen set -x
van Bash.
Opmaakopdrachten
Notitie
UTF-8-codering gebruiken voor logboekregistratieopdrachten.
Deze opdrachten zijn berichten naar de logboekindeling in Azure Pipelines. Ze markeren specifieke logboeklijnen als fouten, waarschuwingen, samenvouwbare secties, enzovoort.
De opmaakopdrachten zijn:
##[group]Beginning of a group
##[warning]Warning message
##[error]Error message
##[section]Start of a section
##[debug]Debug text
##[command]Command-line being run
##[endgroup]
U kunt de opmaakopdrachten in een bash- of PowerShell-taak gebruiken.
steps:
- bash: |
echo "##[group]Beginning of a group"
echo "##[warning]Warning message"
echo "##[error]Error message"
echo "##[section]Start of a section"
echo "##[debug]Debug text"
echo "##[command]Command-line being run"
echo "##[endgroup]"
Deze opdrachten worden als volgt weergegeven in de logboeken:
Dit blok opdrachten kan ook worden samengevouwen en ziet er als volgt uit:
Taakopdrachten
LogIssue: Een fout of waarschuwing vastleggen
##vso[task.logissue]error/warning message
Gebruik
Een foutbericht of waarschuwingsbericht vastleggen in de tijdlijnrecord van de huidige taak.
Eigenschappen
type
=error
ofwarning
(vereist)sourcepath
= locatie van bronbestandlinenumber
= regelnummercolumnnumber
= kolomnummercode
= fout- of waarschuwingscode
Voorbeeld: Een fout vastleggen
#!/bin/bash
echo "##vso[task.logissue type=error]Something went very wrong."
exit 1
Tip
exit 1
is optioneel, maar is vaak een opdracht die u kort nadat een fout is vastgelegd. Als u Opties voor besturingselementen selecteert : Doorgaan op fout, resulteert dit exit 1
in een gedeeltelijk geslaagde build in plaats van een mislukte build. Als alternatief kunt u ook gebruiken task.logissue type=error
.
Voorbeeld: Een waarschuwing vastleggen over een specifieke locatie in een bestand
#!/bin/bash
echo "##vso[task.logissue type=warning;sourcepath=consoleapp/main.cs;linenumber=1;columnnumber=1;code=100;]Found something that could be a problem."
SetProgress: Percentage voltooid weergeven
##vso[task.setprogress]current operation
Gebruik
Voortgang en huidige bewerking voor de huidige taak instellen.
Eigenschappen
value
= percentage voltooiing
Opmerking
echo "Begin a lengthy process..."
for i in {0..100..10}
do
sleep 1
echo "##vso[task.setprogress value=$i;]Sample Progress Indicator"
done
echo "Lengthy process is complete."
Als u wilt zien hoe het eruitziet, slaat u de build op en zet u de wachtrij in de wachtrij en bekijkt u de builduitvoering. U ziet dat een voortgangsindicator wordt gewijzigd wanneer dit script wordt uitgevoerd door de taak.
Voltooid: Tijdlijn voltooien
##vso[task.complete]current operation
Gebruik
Voltooi de tijdlijnrecord voor de huidige taak, stel het taakresultaat en de huidige bewerking in. Als het resultaat niet is opgegeven, stelt u het resultaat in op geslaagd.
Eigenschappen
result
=Succeeded
De taak is voltooid.SucceededWithIssues
Er zijn problemen opgetreden bij de taak. De build wordt voltooid als gedeeltelijk geslaagd.Failed
De build wordt voltooid als mislukt. (Als de Besturingselementopties: Doorgaan op foutoptie is geselecteerd, de build wordt voltooid als gedeeltelijk geslaagd in het beste.)
Opmerking
Registreer een taak als voltooid.
##vso[task.complete result=Succeeded;]DONE
Een taak instellen als mislukt. Als alternatief kunt u ook gebruiken exit 1
.
- bash: |
if [ -z "$SOLUTION" ]; then
echo "##vso[task.logissue type=error;]Missing template parameter \"solution\""
echo "##vso[task.complete result=Failed;]"
fi
LogDetail: een tijdlijnrecord voor een taak maken of bijwerken
##vso[task.logdetail]current operation
Gebruik
Hiermee worden tijdlijnrecords gemaakt en bijgewerkt. Dit wordt voornamelijk intern gebruikt door Azure Pipelines om te rapporteren over stappen, taken en fasen. Hoewel klanten vermeldingen aan de tijdlijn kunnen toevoegen, worden ze meestal niet weergegeven in de gebruikersinterface.
De eerste keer dat we tijdens een stap zien ##vso[task.detail]
, maken we een record voor de detailtijdlijn voor de stap. We kunnen geneste tijdlijnrecords maken en bijwerken op id
en parentid
.
Taakauteurs moeten onthouden welke GUID ze voor elke tijdlijnrecord hebben gebruikt. Het logboekregistratiesysteem houdt de GUID voor elke tijdlijnrecord bij, zodat elke nieuwe GUID een nieuwe tijdlijnrecord oplevert.
Eigenschappen
id
= GUID van tijdlijnrecord (vereist)parentid
= GUID van bovenliggende tijdlijnrecordtype
= Recordtype (vereist voor de eerste keer, kan niet worden overschreven)name
= Recordnaam (vereist voor de eerste keer, kan niet worden overschreven)order
= volgorde van tijdlijnrecord (vereist voor de eerste keer, kan niet worden overschreven)starttime
=Datetime
finishtime
=Datetime
progress
= percentage voltooiingstate
=Unknown
|Initialized
|InProgress
|Completed
result
=Succeeded
|SucceededWithIssues
|Failed
Voorbeelden
Nieuwe hoofdtijdlijnrecord maken:
##vso[task.logdetail id=new guid;name=project1;type=build;order=1]create new timeline record
Nieuwe geneste tijdlijnrecord maken:
##vso[task.logdetail id=new guid;parentid=exist timeline record guid;name=project1;type=build;order=1]create new nested timeline record
Update exist timeline record:
##vso[task.logdetail id=existing timeline record guid;progress=15;state=InProgress;]update timeline record
SetVariable: De waarde van een variabele initialiseren of wijzigen
##vso[task.setvariable]value
Gebruik
Hiermee stelt u een variabele in de variabeleservice van taskcontext in. De eerste taak kan een variabele instellen en de volgende taken kunnen de variabele gebruiken. De variabele wordt als een omgevingsvariabele blootgesteld aan de volgende taken.
Wanneer issecret
deze waarde is ingesteld true
, wordt de waarde van de variabele opgeslagen als geheim en gemaskeerd uit het logboek. Geheime variabelen worden niet doorgegeven aan taken als omgevingsvariabelen en moeten in plaats daarvan worden doorgegeven als invoer.
Wanneer isoutput
deze is ingesteld op true
de syntaxis om te verwijzen naar de setvariabele, is afhankelijk van of u die variabele opent in dezelfde taak, een toekomstige taak of een toekomstige fase. isoutput
Als deze is ingesteld op false
de syntaxis voor het gebruik van die variabele binnen dezelfde taak, is bovendien uniek. Zie de uitvoervariabelen om de juiste syntaxis voor elke use-case te bepalen.
Zie set variables in scripts en definieer variabelen voor meer informatie.
Eigenschappen
variable
= variabelenaam (vereist)issecret
= Booleaanse waarde (optioneel, standaard ingesteld op onwaar)isoutput
= Booleaanse waarde (optioneel, standaard ingesteld op onwaar)isreadonly
= Booleaanse waarde (optioneel, standaard ingesteld op onwaar)
Voorbeelden
Stel de variabelen in:
- bash: |
echo "##vso[task.setvariable variable=sauce;]crushed tomatoes"
echo "##vso[task.setvariable variable=secretSauce;issecret=true]crushed tomatoes with garlic"
echo "##vso[task.setvariable variable=outputSauce;isoutput=true]canned goods"
name: SetVars
Lees de variabelen:
- bash: |
echo "Non-secrets automatically mapped in, sauce is $SAUCE"
echo "Secrets are not automatically mapped in, secretSauce is $SECRETSAUCE"
echo "You can use macro replacement to get secrets, and they'll be masked in the log: $(secretSauce)"
Console-uitvoer:
Non-secrets automatically mapped in, sauce is crushed tomatoes
Secrets are not automatically mapped in, secretSauce is
You can use macro replacement to get secrets, and they'll be masked in the log: ***
Future jobs can also see canned goods
Future jobs can also see canned goods
SetSecret: Een waarde registreren als geheim
##vso[task.setsecret]value
Gebruik
De waarde wordt geregistreerd als geheim voor de duur van de taak. De waarde wordt vanaf dit moment uit de logboeken gemaskeerd. Deze opdracht is handig wanneer een geheim wordt getransformeerd (bijvoorbeeld met base64 gecodeerd) of afgeleid.
Opmerking: eerdere exemplaren van de geheime waarde worden niet gemaskeerd.
Voorbeelden
Stel de variabelen in:
- bash: |
NEWSECRET=$(echo $OLDSECRET|base64)
echo "##vso[task.setsecret]$NEWSECRET"
name: SetSecret
env:
OLDSECRET: "SeCrEtVaLuE"
Lees de variabelen:
- bash: |
echo "Transformed and derived secrets will be masked: $(echo $OLDSECRET|base64)"
env:
OLDSECRET: "SeCrEtVaLuE"
Console-uitvoer:
Transformed and derived secrets will be masked: ***
SetEndpoint: Een serviceverbindingsveld wijzigen
##vso[task.setendpoint]value
Gebruik
Stel een serviceverbindingsveld in met de opgegeven waarde. De bijgewerkte waarde wordt bewaard in het eindpunt voor de volgende taken die binnen dezelfde taak worden uitgevoerd.
Eigenschappen
id
= serviceverbindings-id (vereist)field
= veldtype, een vanauthParameter
,dataParameter
ofurl
(vereist)key
= sleutel (vereist, tenzijfield
=url
)
Voorbeelden
##vso[task.setendpoint id=000-0000-0000;field=authParameter;key=AccessToken]testvalue
##vso[task.setendpoint id=000-0000-0000;field=dataParameter;key=userVariable]testvalue
##vso[task.setendpoint id=000-0000-0000;field=url]https://example.com/service
AddAttachment: Voeg een bestand toe aan de build
##vso[task.addattachment]value
Gebruik
Upload en voeg bijlage toe aan de huidige tijdlijnrecord. Deze bestanden zijn niet beschikbaar voor downloaden met logboeken. Deze kunnen alleen worden verwezen door extensies met behulp van het type of de naamwaarden.
Eigenschappen
type
= bijlagetype (vereist)name
= bijlagenaam (vereist)
Opmerking
##vso[task.addattachment type=myattachmenttype;name=myattachmentname;]c:\myattachment.txt
UploadSummary: Enkele Markdown-inhoud toevoegen aan de samenvatting van de build
##vso[task.uploadsummary]local file path
Gebruik
Upload en voeg samenvatting markdown toe vanuit een MD-bestand in de opslagplaats naar de huidige tijdlijnrecord. Deze samenvatting wordt toegevoegd aan het build-/releaseoverzicht en kan niet worden gedownload met logboeken. De samenvatting moet de indeling UTF-8 of ASCII hebben. De samenvatting wordt weergegeven op het tabblad Extensies van de pijplijnuitvoering. Markdown-rendering op het tabblad Extensies verschilt van Azure DevOps-wikirendering.
Voorbeelden
##vso[task.uploadsummary]$(System.DefaultWorkingDirectory)/testsummary.md
Het is een korte vorm voor de opdracht
##vso[task.addattachment type=Distributedtask.Core.Summary;name=testsummaryname;]c:\testsummary.md
UploadFile: Upload een bestand dat kan worden gedownload met taaklogboeken
##vso[task.uploadfile]local file path
Gebruik
Upload het bestand met geïnteresseerde gebruikers als aanvullende logboekinformatie naar de huidige tijdlijnrecord. Het bestand moet samen met taaklogboeken kunnen worden gedownload.
Opmerking
##vso[task.uploadfile]c:\additionalfile.log
PrependPath: Een pad naar de omgevingsvariabele PATH prepend
##vso[task.prependpath]local file path
Gebruik
Werk de omgevingsvariabele PATH bij door vooraf te gaan aan path. De bijgewerkte omgevingsvariabele wordt weergegeven in de volgende taken.
Opmerking
##vso[task.prependpath]c:\my\directory\path
Artefactopdrachten
Koppelen: Een artefact initialiseren
##vso[artifact.associate]artifact location
Gebruik
Maak een koppeling naar een bestaand artefact. Artefactlocatie moet een bestandscontainerpad, VC-pad of UNC-sharepad zijn.
Eigenschappen
artifactname
= artefactnaam (vereist)type
= artefacttype (vereist)container
|filepath
|versioncontrol
|gitref
|tfvclabel
Voorbeelden
Container
##vso[artifact.associate type=container;artifactname=MyServerDrop]#/1/build
Filepath
##vso[artifact.associate type=filepath;artifactname=MyFileShareDrop]\\MyShare\MyDropLocation
Versioncontrol
##vso[artifact.associate type=versioncontrol;artifactname=MyTfvcPath]$/MyTeamProj/MyFolder
gitref
##vso[artifact.associate type=gitref;artifactname=MyTag]refs/tags/MyGitTag
tfvclabel
##vso[artifact.associate type=tfvclabel;artifactname=MyTag]MyTfvcLabel
Aangepast artefact
##vso[artifact.associate artifactname=myDrop;artifacttype=myartifacttype]https://downloads.visualstudio.com/foo/bar/package.zip
Uploaden: een artefact uploaden
##vso[artifact.upload]local file path
Gebruik
Upload een lokaal bestand naar een bestandscontainermap en publiceer eventueel een artefact als artifactname
.
Eigenschappen
containerfolder
= map waarnaar het bestand wordt geüpload, wordt indien nodig de map gemaakt.artifactname
= artefactnaam. (Verplicht)
Opmerking
##vso[artifact.upload containerfolder=testresult;artifactname=uploadedresult]c:\testresult.trx
Notitie
Het verschil tussen Artifact.associate en Artifact.upload is dat de eerste kan worden gebruikt om een koppeling naar een bestaand artefact te maken, terwijl de laatste kan worden gebruikt om een nieuw artefact te uploaden/publiceren.
Build-opdrachten
UploadLog: Een logboek uploaden
##vso[build.uploadlog]local file path
Gebruik
Upload de gebruiker die geïnteresseerd is in het logboek naar de map container 'logs\tool
' van de build.
Opmerking
##vso[build.uploadlog]c:\msbuild.log
UpdateBuildNumber: Overschrijf het automatisch gegenereerde buildnummer
##vso[build.updatebuildnumber]build number
Gebruik
U kunt automatisch een buildnummer genereren op basis van tokens die u opgeeft in de pijplijnopties. Als u echter uw eigen logica wilt gebruiken om het buildnummer in te stellen, kunt u deze opdracht voor logboekregistratie gebruiken.
Opmerking
##vso[build.updatebuildnumber]my-new-build-number
AddBuildTag: Een tag toevoegen aan de build
##vso[build.addbuildtag]build tag
Gebruik
Voeg een tag toe voor de huidige build. U kunt de tag uitbreiden met een vooraf gedefinieerde of door de gebruiker gedefinieerde variabele. Hier wordt bijvoorbeeld een nieuwe tag toegevoegd aan een Bash-taak met de waarde last_scanned-$(currentDate)
. U kunt geen dubbele punt gebruiken met AddBuildTag.
Opmerking
- task: Bash@3
inputs:
targetType: 'inline'
script: |
last_scanned="last_scanned-$(currentDate)"
echo "##vso[build.addbuildtag]$last_scanned"
displayName: 'Apply last scanned tag'
Releaseopdrachten
UpdateReleaseName: naam van huidige release wijzigen
##vso[release.updatereleasename]release name
Gebruik
Werk de releasenaam voor de actieve release bij.
Notitie
Ondersteund in Azure DevOps en Azure DevOps Server vanaf versie 2020.
Opmerking
##vso[release.updatereleasename]my-new-release-name