Felsöka pipelinekörningar
Azure DevOps Services | Azure DevOps Server 2022 – Azure DevOps Server 2019
Om pipelinekörningen inte kan slutföras kan du använda diagnostikinformationen och loggarna som tillhandahålls av sammanfattningssidan för pipelinekörningen för att felsöka problemet.
Visa loggar
Välj felmeddelandet för att visa loggarna för uppgiften som inte kunde slutföras.
Loggsidan visas med felet valt. I det här exemplet uppstår ett fel i cmd-line
uppgiften, där echo
kommandot anges som ech
.
Du kan visa råloggen för uppgiften genom att välja Visa rålogg, och du kan söka i loggen med hjälp av Sök.
Genomsök loggarna för den misslyckade uppgiften efter felinformation och ledtrådar om varför uppgiften misslyckas. Som standard genereras icke-verbose-loggar av en pipelinekörning. Om standardloggarna inte anger orsaken till problemet kan du få mer information genom att konfigurera utförliga loggar.
Sidan Felanalys
Felsökningshjälp finns på sidan Felanalys . Flytta musen över felinformationsraden och välj ikonen Visa analys .
Välj Visa agent för lokalt installerade agenter (eller Om värdbaserad agentbild för Microsoft-värdbaserade agenter) för att visa mer information om agenten som används för att köra pipelinen och Visa logg för att visa pipelinekörningsloggarna.
Välj namnet på aktiviteten nedan Körningsinformation för att visa information om aktiviteten.
I det här exemplet kan du se att det finns ett fel i Value
.Script
Välj Om den här uppgiften för att visa dokumentationen för uppgiften.
Om problemet inte framgår av sammanfattningssidan för pipelinekörningen eller om du bläddrar i loggarna läser du avsnittet Vanliga problem och läser Granska loggar för att diagnostisera pipelineproblem för information om hur du laddar ned fullständiga loggar som innehåller ytterligare diagnostikinformation.
Vanliga problem
- Tidsgränsen för jobb uppnås
- Problem med att ladda ned kod
- Min pipeline misslyckas i ett kommandoradssteg, till exempel MSBUILD
- Fel med att filer eller mappar används
- Tillfälliga eller inkonsekventa MSBuild-fel
- Processen slutar att svara
- Radslut för flera plattformar
- Variabler som har " (enskilt citattecken) tillagt
- Problem som rör anslutningen till servern
- Pipelinen slutade höra från agenten
Uppgiftsinsikter för misslyckade pipelinekörningar
Azure DevOps tillhandahåller en task insights för misslyckade pipelinekörningar , som när den är aktiverad ger popup-meddelanden om byggfel med en länk för att visa en rapport.
Om du vill konfigurera den här inställningen går du till Förhandsversionsfunktioner, söker efter Task Insights för misslyckade pipelinekörningar och väljer önskad inställning.
Tidsgränsen för jobb uppnås
En pipeline kan köras under lång tid och sedan misslyckas på grund av tidsgränsen för jobbet. Tidsgränsen för jobb är nära beroende av vilken agent som används. Kostnadsfria Microsoft-värdbaserade agenter har en maximal timeout på 60 minuter per jobb för en privat lagringsplats och 360 minuter för en offentlig lagringsplats. Om du vill öka den maximala tidsgränsen för ett jobb kan du välja något av följande.
- Köp en Microsoft-värdbaserad agent som ger dig 360 minuter för alla jobb, oavsett vilken lagringsplats som används
- Använd en lokalt installerad agent för att utesluta eventuella timeout-problem på grund av agenten
Läs mer om tidsgräns för jobb.
Kommentar
Om dina Microsoft-värdbaserade agentjobb överskrider tidsgränsen kontrollerar du att du inte har angett en tidsgräns för pipeline som är mindre än den maximala tidsgränsen för ett jobb. Mer information finns i Timeouter.
Problem med att ladda ned kod
Min pipeline misslyckas i ett utcheckningssteg
Om du använder ett checkout
steg på en Azure Repos Git-lagringsplats i din organisation som finns i ett annat projekt än din pipeline kontrollerar du att begränsa jobbauktoriseringsomfånget till den aktuella projektinställningen är inaktiverat eller följer stegen i Begränsade byggidentiteter för att säkerställa att din pipeline har åtkomst till lagringsplatsen.
När din pipeline inte kan komma åt lagringsplatsen på grund av begränsat omfång för jobbauktorisering får du felet Git fetch failed with exit code 128
och loggarna innehåller en post som liknar Remote: TF401019: The Git repository with name or identifier <your repo name> does not exist or you do not have permissions for the operation you are attempting.
Om pipelinen misslyckas omedelbart med Could not find a project that corresponds with the repository
kontrollerar du att projektets och lagringsplatsens namn är korrekta i checkout
steget eller lagringsplatsens resursdeklaration.
Problem med Team Foundation Version Control (TFVC)
Hämta källor som inte laddar ned vissa filer
Detta kan kännetecknas av ett meddelande i loggen "Alla filer uppdaterade" från tf get
kommandot. Kontrollera att den inbyggda tjänstidentiteten har behörighet att ladda ned källorna. Antingen måste identiteten Project Collection Build Service eller Project Build Service ha behörighet att ladda ned källorna, beroende på det valda auktoriseringsomfånget på fliken Allmänt i bygg-pipelinen. I webbgränssnittet för versionskontroll kan du bläddra bland projektfilerna på valfri nivå i mapphierarkin och kontrollera säkerhetsinställningarna.
Hämta källor via Team Foundation Proxy
Det enklaste sättet att konfigurera agenten att hämta källor via en Team Foundation Proxy är att ange miljövariabeln TFSPROXY
som pekar på TFVC-proxyservern för agentens körning som användare.
Windows:
set TFSPROXY=http://tfvcproxy:8081
setx TFSPROXY=http://tfvcproxy:8081 // If the agent service is running as NETWORKSERVICE or any service account you can't easily set user level environment variable
macOS/Linux:
export TFSPROXY=http://tfvcproxy:8081
Min pipeline misslyckas i ett kommandoradssteg, till exempel MSBUILD
Det är bra att begränsa om ett bygg- eller versionsfel beror på ett Azure Pipelines/TFS-produktproblem (agent eller uppgifter). Versions- och versionsfel kan också bero på externa kommandon.
Kontrollera loggarna för den exakta kommandoraden som körs av den misslyckade uppgiften. Om du försöker köra kommandot lokalt från kommandoraden kan problemet återskapas. Det kan vara bra att köra kommandot lokalt från din egen dator och/eller logga in på datorn och köra kommandot som tjänstkonto.
Inträffar till exempel problemet under MSBuild-delen av bygg-pipelinen (till exempel använder du antingen uppgiften MSBuild eller Visual Studio Build )? I så fall kan du prova att köra samma MSBuild-kommando på en lokal dator med samma argument. Om du kan återskapa problemet på en lokal dator är nästa steg att undersöka MSBuild-problemet .
Fillayout
Platsen för verktyg, bibliotek, rubriker och andra saker som behövs för en version kan skilja sig från den värdbaserade agenten än den lokala datorn. Om en version misslyckas eftersom den inte kan hitta någon av dessa filer kan du använda skripten nedan för att granska layouten på agenten. Detta kan hjälpa dig att spåra den saknade filen.
Skapa en ny YAML-pipeline på en tillfällig plats (t.ex. en ny lagringsplats som skapats i syfte att felsöka).
Som det är skrivet söker skriptet igenom kataloger på din sökväg.
Du kan också redigera SEARCH_PATH=
raden för att söka på andra platser.
# Script for Linux and macOS
pool: { vmImage: ubuntu-latest } # or whatever pool you use
steps:
- checkout: none
- bash: |
SEARCH_PATH=$PATH # or any colon-delimited list of paths
IFS=':' read -r -a PathDirs <<< "$SEARCH_PATH"
echo "##[debug] Found directories"
for element in "${PathDirs[@]}"; do
echo "$element"
done;
echo;
echo;
echo "##[debug] Found files"
for element in "${PathDirs[@]}"; do
find "$element" -type f
done
# Script for Windows
pool: { vmImage: windows-2019 } # or whatever pool you use
steps:
- checkout: none
- powershell: |
$SEARCH_PATH=$Env:Path
Write-Host "##[debug] Found directories"
ForEach ($Dir in $SEARCH_PATH -split ";") {
Write-Host "$Dir"
}
Write-Host ""
Write-Host ""
Write-Host "##[debug] Found files"
ForEach ($Dir in $SEARCH_PATH -split ";") {
Get-ChildItem $Dir -File -ErrorAction Continue | ForEach-Object -Process {
Write-Host $_.FullName
}
}
Skillnader mellan lokal kommandotolk och agent
Tänk på att vissa skillnader gäller när du kör ett kommando på en lokal dator och när en version eller version körs på en agent. Om agenten är konfigurerad för att köras som en tjänst i Linux, macOS eller Windows körs den inte i en interaktiv inloggad session. Utan en interaktiv inloggad session finns interaktion med användargränssnittet och andra begränsningar.
Fel med att filer eller mappar används
File or folder in use
fel indikeras ofta av felmeddelanden som:
Access to the path [...] is denied.
The process cannot access the file [...] because it is being used by another process.
Access is denied.
Can't move [...] to [...]
Felsökningssteg:
- Identifiera filer och mappar som används
- Antivirusundantag
- MSBuild och /nodeReuse:false
- MSBuild och /maxcpucount:[n]
Identifiera filer och mappar som används
I Windows kan verktyg som Process Monitor vara att samla in en spårning av filhändelser under en specifik katalog. Eller för en ögonblicksbild i tid kan verktyg som Process Explorer eller Handle användas.
Antivirusundantag
Antivirusprogram som söker igenom dina filer kan orsaka fil- eller mappanvändningsfel under en version eller utgåva. Att lägga till ett antivirusundantag för agentkatalogen och konfigurerad "arbetsmapp" kan hjälpa till att identifiera antivirusprogram som störande process.
MSBuild och /nodeReuse:false
Om du anropar MSBuild under bygget måste du skicka argumentet /nodeReuse:false
(kort formulär /nr:false
). Annars fortsätter MSBuild-processer att köras när bygget har slutförts. Processerna finns kvar under en tid i väntan på en potentiell efterföljande version.
Den här funktionen i MSBuild kan störa försök att ta bort eller flytta en katalog – på grund av en konflikt med arbetskatalogen i MSBuild-processen(es).
Uppgifterna MSBuild och Visual Studio Build lägger redan till /nr:false
argumenten som skickas till MSBuild. Men om du anropar MSBuild från ditt eget skript måste du ange argumentet.
MSBuild och /maxcpucount:[n]
Som standard kör bygguppgifter som MSBuild och Visual Studio Build MSBuild med växeln /m
. I vissa fall kan detta orsaka problem, till exempel problem med åtkomst till flera processer.
Prova att lägga till argumentet i /m:1
dina bygguppgifter för att tvinga MSBuild att bara köra en process i taget.
Problem med filanvändning kan uppstå när funktionen samtidig process används i MSBuild. Om du inte anger argumentet /maxcpucount:[n]
(kort formulär /m:[n]
) instrueras MSBuild att endast använda en enda process. Om du använder MSBuild- eller Visual Studio Build-uppgifter kan du behöva ange "/m:1" för att åsidosätta argumentet "/m" som läggs till som standard.
Tillfälliga eller inkonsekventa MSBuild-fel
Om det uppstår tillfälliga eller inkonsekventa MSBuild-fel kan du prova att instruera MSBuild att endast använda en enda process. Tillfälliga eller inkonsekventa fel kan tyda på att målkonfigurationen inte är kompatibel med funktionen samtidig process i MSBuild. Se MSBuild och /maxcpucount:[n].
Processen slutar att svara
Processen slutar svara på orsaker och felsökningssteg:
Väntar på indata
En process som slutar svara kan tyda på att en process väntar på indata.
Att köra agenten från kommandoraden i en interaktiv inloggad session kan hjälpa till att identifiera om en process frågar med en dialogruta för indata.
Att köra agenten som en tjänst kan hjälpa till att eliminera program från att fråga efter indata. I .NET kan program till exempel förlita sig på System.Environment.UserInteractive Boolean för att avgöra om du vill fråga. När agenten körs som en Windows-tjänst är värdet falskt.
Processdump
Genom att analysera en dump av processen kan du identifiera vad en låst process väntar på.
WiX-projekt
Att skapa ett WiX-projekt när anpassade MSBuild-loggare är aktiverade kan leda till att WiX fastnar i dödläget i utdataströmmen. Om du lägger till ytterligare MSBuild-argument /p:RunWixToolsOutOfProc=true
kan du kringgå problemet.
Radslut för flera plattformar
När du kör pipelines på flera plattformar kan du ibland stöta på problem med olika radslut. Tidigare använde Linux och macOS radmatningstecken (LF) medan Windows använde en vagnretur plus en radmatning (CRLF). Git försöker kompensera för skillnaden genom att automatiskt få rader att sluta i LF på lagringsplatsen men CRLF i arbetskatalogen i Windows.
De flesta Windows-verktyg är bra med LF-slut, och det här automatiska beteendet kan orsaka fler problem än det löser.
Om du stöter på problem baserat på radslut rekommenderar vi att du konfigurerar Git för att föredra LF överallt.
Det gör du genom att lägga till en .gitattributes
fil i roten på lagringsplatsen.
Lägg till följande rad i filen:
* text eol=lf
Variabler som har " (enskilt citattecken) tillagt
Om din pipeline innehåller ett Bash-skript som anger variabler med kommandot ##vso
kan du se ytterligare '
ett tillägg till värdet för den variabel som du anger.
Detta beror på en interaktion med set -x
.
Lösningen är att inaktivera set -x
tillfälligt innan du ställer in en variabel.
Bash-syntaxen för att göra detta är set +x
.
set +x
echo ##vso[task.setvariable variable=MY_VAR]my_value
set -x
Varför inträffar det här?
Många Bash-skript innehåller set -x
kommandot för att hjälpa till med felsökning.
Bash spårar exakt vilket kommando som kördes och upprepar det till stdout.
Detta gör att agenten ##vso
ser kommandot två gånger, och den andra gången har Bash lagt till '
tecknet i slutet.
Tänk till exempel på den här pipelinen:
steps:
- bash: |
set -x
echo ##vso[task.setvariable variable=MY_VAR]my_value
Vid stdout ser agenten två rader:
##vso[task.setvariable variable=MY_VAR]my_value
+ echo '##vso[task.setvariable variable=MY_VAR]my_value'
När agenten ser den första raden MY_VAR
anges till rätt värde, "my_value".
Men när den ser den andra raden bearbetar agenten allt till slutet av raden.
MY_VAR
anges till "my_value".
Bibliotek installeras inte för Python-program när skriptet körs
När ett Python-program distribueras körs i vissa fall en CI/CD-pipeline och koden har distribuerats, men den requirements.txt fil som ansvarar för att installera alla beroendebibliotek körs inte.
Om du vill installera beroendena använder du ett skript efter distributionen i App Service-distributionsuppgiften. I följande exempel visas det kommando som du måste använda i skriptet efter distributionen. Du kan uppdatera skriptet för ditt scenario.
D:\home\python364x64\python.exe -m pip install -r requirements.txt
Problem som rör anslutningen till servern
Information om hur du felsöker problem som rör tjänstanslutningar finns i Felsökning av tjänstanslutningar.
Pipelinen slutade höra från agenten
Om din pipeline misslyckas med ett meddelande som We stopped hearing from agent <agent name>. Verify the agent machine is running and has a healthy network connection.
kontrollerar du agentens resursanvändning för att se om agentdatorn får slut på resurser. Från och med Sprint 228 innehåller Azure Pipelines-loggarna resursanvändningsmått för varje steg.
När du använder Azure DevOps Services kan du se resursutnyttjande i loggarna, inklusive diskanvändning, minnesanvändning och CPU-användning, genom att aktivera utförliga loggar. När pipelinen är klar söker du i loggarna Agent environment resources
efter poster för varje steg.
2024-02-28T17:41:15.1315148Z ##[debug]Agent environment resources - Disk: D:\ Available 12342.00 MB out of 14333.00 MB, Memory: Used 1907.00 MB out of 7167.00 MB, CPU: Usage 17.23%
Information om hur du samlar in ytterligare resursanvändningsloggar finns i Samla in information om resursanvändning.
Aktivera Storage Explorer för att distribuera statiskt innehåll som .css och .js till en statisk webbplats från Azure DevOps via Azure Pipelines
I det här scenariot kan du använda Azure File Copy-uppgiften för att ladda upp innehåll till webbplatsen. Du kan använda något av de verktyg som beskrivs i Ladda upp innehåll för att ladda upp innehåll till webbcontainern.