Folyamatfuttatások hibaelhárítása

Azure DevOps Services | Azure DevOps Server 2022 – Azure DevOps Server 2019

Ha a folyamatfuttatás nem fejeződik be, a probléma elhárításához használhatja a folyamatfuttatás összefoglaló oldalának diagnosztikai adatait és naplóit.

Képernyőkép a folyamatfuttatás összegzési oldaláról.

Naplók megtekintése

Válassza ki a hibaüzenetet a sikertelen feladat naplóinak megtekintéséhez.

Képernyőkép a feladat hibaüzenetéről a folyamatfuttatás összegzési oldalán.

Megjelenik a naplók lap, és a hiba ki van jelölve. Ebben a példában hiba történt a cmd-line feladatban, amelyben a parancsot a echo rendszer a következőképpen adja meg ech.

Képernyőkép a folyamatfuttatás diagnosztikai naplójáról.

A tevékenység nyers naplójának megtekintéséhez válassza a Nyers napló megtekintése lehetőséget, és a kereséssel kereshet a naplóban.

Képernyőkép az Azure DevOps naplónézeti beállításairól.

A sikertelen tevékenység naplóiban hibainformációkat és a feladat sikertelenségével kapcsolatos nyomokat keres. Alapértelmezés szerint a nemverbózus naplókat egy folyamatfuttatás hozza létre. Ha az alapértelmezett naplók nem jelzik a probléma okát, részletes naplók konfigurálásával további információt kaphat.

Hibaelemzési oldal

A hibaelhárítási segítség a Hibaelemzés lapon érhető el. Vigye az egeret a hibainformációs sor fölé, és válassza a Nézetelemzés ikont.

Képernyőkép a folyamatfuttatás összegzési oldalán található nézetelemzés ikonjáról.

Az Azure DevOps Server nézetelemzési ikonjának képernyőképe.

Válassza a Saját üzemeltetésű ügynökök ügynökének megtekintése (vagy a Microsoft által üzemeltetett ügynökök üzemeltetett ügynökének rendszerképe ) lehetőséget a folyamat futtatásához használt ügynökkel kapcsolatos további információk megtekintéséhez, a napló megtekintése pedig a folyamatfuttatási naplók megtekintéséhez.

Képernyőkép az Azure DevOps Portál hibaelemzési oldaláról.

A tevékenység adatainak megtekintéséhez válassza ki az alábbi futtatási idő adatait .

Képernyőkép a feladat részleteiről a hibaelemzésből.

Ebben a példában láthatja, hogy hiba történt a ValueScriptfájlban. A feladat dokumentációjának megtekintéséhez válassza a Feladat névjegye lehetőséget.

Ha a probléma nem jelenik meg a folyamatfuttatási összefoglaló oldalon vagy a naplók böngészése során, tekintse meg a következő Gyakori problémák szakaszt, és tekintse át a naplók áttekintését a folyamatproblémák diagnosztizálásához a teljes naplók letöltésével kapcsolatos információkért, amelyek további diagnosztikai információkat tartalmaznak.

Gyakori problémák

Feladatelemzések sikertelen folyamatfuttatásokhoz

Az Azure DevOps egy feladat-Elemzések biztosít a sikertelen folyamatfuttatások beállításához, amely ha engedélyezve van, előugró értesítéseket küld a buildelési hibákról egy jelentés megtekintésére szolgáló hivatkozással.

Képernyőkép a tevékenységelemzési metrikákról.

A beállítás konfigurálásához keresse meg az előzetes verziójú funkciókat, keresse meg a feladat Elemzések a sikertelen folyamatfuttatásokhoz, és válassza ki a kívánt beállítást.

Képernyőkép a feladatelemzésről a sikertelen folyamatfuttatási beállításhoz.

Feladat időtúllépése

A folyamatok hosszú ideig futhatnak, majd a feladat időtúllépése miatt meghiúsulhatnak. A feladat időtúllépése szorosan függ a használt ügynöktől. Az ingyenes Microsoft által üzemeltetett ügynökök feladatonként legfeljebb 60 perc időtúllépéssel rendelkeznek egy privát adattár esetében, nyilvános adattár esetén pedig 360 percet. A feladatok maximális időtúllépésének növeléséhez az alábbiak bármelyikét választhatja.

  • Vásároljon egy Microsoft által üzemeltetett ügynököt, amely 360 percet biztosít minden feladathoz, függetlenül a használt adattártól
  • Saját üzemeltetésű ügynökkel kizárhatja az ügynök miatt felmerülő időtúllépési problémákat

További információ a feladatok időtúllépéséről.

Feljegyzés

Ha a Microsoft által üzemeltetett ügynökfeladatok túllépik az időkorlátot, győződjön meg arról, hogy nem adott meg olyan folyamat-időtúllépést, amely kisebb, mint egy feladat maximális időtúllépése. Az ellenőrzéshez tekintse meg az időtúllépéseket.

Kód letöltésével kapcsolatos problémák

A folyamatom egy kivételi lépésen meghiúsul

Ha egy, a folyamattól eltérő projektben lévő Azure Repos Git-adattárban használ egy checkout lépést, győződjön meg arról, hogy a feladat engedélyezési hatókörének korlátozása az aktuális projektbeállításra le van tiltva, vagy a hatókörrel rendelkező buildidentitások lépéseit követve győződjön meg arról, hogy a folyamat hozzáfér az adattárhoz.

Ha a folyamat korlátozott feladat-engedélyezési hatókör miatt nem fér hozzá az adattárhoz, a hibaüzenet Git fetch failed with exit code 128 jelenik meg, és a naplók a következőhöz hasonló bejegyzést tartalmaznak: 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.

Ha a folyamat azonnal Could not find a project that corresponds with the repositorymeghiúsul, győződjön meg arról, hogy a projekt és az adattár neve helyes a checkout lépésben vagy az adattár erőforrás-deklarációjában.

A Team Foundation verziókövetési (TFVC) problémái

Fájlok letöltésének sikertelen lekérése

Ezt a parancs "Minden fájl naprakész" naplójának üzenete tf get jellemezheti. Ellenőrizze, hogy a beépített szolgáltatásidentitás rendelkezik-e engedéllyel a források letöltéséhez. Az identitás projektgyűjtemény buildelési szolgáltatásának vagy a Project Build Service-nek engedélyre van szüksége a források letöltéséhez a buildelési folyamat Általános lapján kiválasztott engedélyezési hatókörtől függően. A verziókövetés webes felhasználói felületén a mappahierarchia bármely szintjén tallózhat a projektfájlok között, és ellenőrizheti a biztonsági beállításokat.

Források lekérése a Team Foundation proxyn keresztül

A legegyszerűbben úgy konfigurálhatja az ügynököt, hogy forrásokhoz jusson a Team Foundation-proxyn keresztül, ha olyan környezeti változót TFSPROXY állít be, amely az ügynök felhasználóként való futtatásához a TFVC proxykiszolgálóra mutat.

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

A folyamat meghiúsul egy parancssori lépésen, például az MSBUILD-n

Hasznos leszűkíteni, hogy a buildelési vagy kiadási hiba egy Azure Pipelines/TFS-termékproblémának (ügynöknek vagy feladatnak) az eredménye-e. A buildelési és kiadási hibák külső parancsokból is eredhetnek.

Ellenőrizze a naplókban, hogy a hibás feladat pontosan végrehajtja-e a parancssort. A parancs parancssorból történő helyi futtatásának megkísérlése reprodukálhatja a problémát. Hasznos lehet, ha a parancsot helyileg futtatja a saját gépéről, és/vagy bejelentkezik a gépre, és szolgáltatásfiókként futtatja a parancsot.

Például a probléma a buildelési folyamat MSBuild része alatt jelentkezik (például az MSBuild vagy a Visual Studio Build feladatot használja)? Ha igen, próbálja meg ugyanazt az MSBuild parancsot futtatni egy helyi gépen ugyanazokkal az argumentumokkal. Ha egy helyi gépen reprodukálhatja a problémát, a következő lépés az MSBuild hiba kivizsgálása.

Fájlelrendezés

A buildhez szükséges eszközök, kódtárak, fejlécek és egyéb elemek helye eltérő lehet az üzemeltetett ügynökön, mint a helyi gépen. Ha egy build meghiúsul, mert nem találja az egyik ilyen fájlt, az alábbi szkriptekkel megvizsgálhatja az ügynök elrendezését. Ez segíthet a hiányzó fájl nyomon követésében.

Hozzon létre egy új YAML-folyamatot egy ideiglenes helyen (például egy új adattárat, amelyet hibaelhárítás céljából hoztak létre). Ahogy megírtuk, a szkript könyvtárakat keres az elérési úton. Igény szerint szerkesztheti a SEARCH_PATH= sort más helyeken való kereséshez.

# 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
      }
    }

Különbségek a helyi parancssor és az ügynök között

Ne feledje, hogy bizonyos különbségek akkor lépnek érvénybe, amikor parancsokat hajtanak végre egy helyi gépen, és amikor egy build vagy kiadás fut egy ügynökön. Ha az ügynök úgy van konfigurálva, hogy szolgáltatásként fusson Linux, macOS vagy Windows rendszeren, akkor nem egy interaktív bejelentkezett munkameneten belül fut. Interaktív bejelentkezett munkamenet nélkül a felhasználói felület interakciója és egyéb korlátozások léteznek.

Fájl vagy mappa használatban hibák

File or folder in use a hibákat gyakran hibaüzenetek jelzik, például:

  • 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 [...]

Hibaelhárítási lépések:

A használatban lévő fájlok és mappák észlelése

Windows rendszeren az olyan eszközök, mint a Folyamatfigyelő , egy adott könyvtárban rögzíthetik a fájlesemények nyomkövetését. A pillanatképek időben történő létrehozásához olyan eszközök is használhatók, mint a Process Explorer vagy a Handle .

Vírus elleni kizárás

A fájlokat beolvasó víruskereső szoftverek a buildelés vagy kiadás során használatban lévő fájlokat vagy mappákat okozhatnak. Ha hozzáad egy vírusvédelmi kizárást az ügynökkönyvtárhoz, és konfigurálta a "munkahelyi mappát", az segíthet azonosítani a vírusirtó szoftvereket zavaró folyamatként.

MSBuild és /nodeReuse:false

Ha a build során meghívja az MSBuild parancsot, mindenképpen adja meg az argumentumot /nodeReuse:false (rövid űrlap /nr:false). Ellenkező esetben az MSBuild-folyamatok a build befejezése után is futnak. A folyamatok egy ideig megmaradnak a lehetséges későbbi buildek előrejelzésében.

Az MSBuild ezen funkciója zavarhatja a címtárak törlésére vagy áthelyezésére tett kísérleteket – az MSBuild folyamat(ok) munkakönyvtárával való ütközés miatt.

Az MSBuild és a Visual Studio buildelési feladatai már hozzáadják /nr:false az MSBuildnek átadott argumentumokat. Ha azonban saját szkriptből hívja meg az MSBuild parancsot, meg kell adnia az argumentumot.

MSBuild és /maxcpucount:[n]

Alapértelmezés szerint az olyan buildelési feladatok, mint az MSBuild és a Visual Studio Build , az MSBuild parancsot futtatják a /m kapcsolóval. Bizonyos esetekben ez problémákat okozhat, például több folyamatfájl-hozzáférési problémát.

Próbálja meg hozzáadni az argumentumot a /m:1 buildelési tevékenységekhez, hogy kényszerítse az MSBuildet, hogy egyszerre csak egy folyamatot futtasson.

A használatban lévő fájlokkal kapcsolatos problémák akkor fordulhatnak elő, ha az MSBuild egyidejű folyamat funkcióját használja. Ha nem adja meg az argumentumot /maxcpucount:[n] (rövid űrlap /m:[n]) az MSBuild parancsot utasítja arra, hogy csak egyetlen folyamatot használjon. Ha az MSBuild vagy a Visual Studio buildelési feladatait használja, előfordulhat, hogy meg kell adnia a "/m:1" értéket az alapértelmezés szerint hozzáadott "/m" argumentum felülbírálásához.

Időszakos vagy inkonzisztens MSBuild hibák

Ha időszakos vagy inkonzisztens MSBuild-hibákat tapasztal, próbálja meg arra utasítani az MSBuildet, hogy csak egyetlen folyamatot használjon. Időszakos vagy inkonzisztens hibák azt jelezhetik, hogy a célkonfiguráció nem kompatibilis az MSBuild egyidejű folyamat funkciójával. Lásd: MSBuild és /maxcpucount:[n].

A folyamat nem válaszol

A folyamat nem válaszol az okokra és a hibaelhárítási lépésekre:

Várakozás bemenetre

A válaszadást leállító folyamat azt jelezheti, hogy egy folyamat a bemenetre vár.

Ha egy interaktív bejelentkezett munkamenet parancssorából futtatja az ügynököt, az segíthet annak azonosításában, hogy egy folyamat egy párbeszédpanelen kéri-e a bemenetet.

Az ügynök szolgáltatásként való futtatása segíthet abban, hogy a programok ne kérjenek bemenetet. A .NET-ben például a programok a System.Environment.UserInteractive logikai értékre támaszkodhatnak annak meghatározásához, hogy kérik-e. Ha az ügynök Windows-szolgáltatásként fut, az érték hamis.

Folyamatkép

A folyamat memóriaképének elemzése segíthet azonosítani, hogy egy holtpontú folyamat mire vár.

WiX-projekt

Ha egyéni MSBuild-naplózók engedélyezve vannak, WiX-projekt létrehozása a kimeneti streamre váró holtponthoz vezethet. A további MSBuild argumentum /p:RunWixToolsOutOfProc=true hozzáadása megkerüli a problémát.

Több platform vonalvégződései

Ha több platformon futtat folyamatokat, előfordulhat, hogy problémákba ütközik a különböző vonalvégződésekkel. Korábban a Linux és a macOS vonalas (LF) karaktereket használt, míg a Windows kocsivisszat és sortörést (CRLF) használt. A Git úgy próbálja kompenzálni a különbséget, hogy a sorok automatikusan LF-ben végződnek az adattárban, de a CRLF a Windows munkakönyvtárában.

A Legtöbb Windows-eszköz jól működik a csak LF végződésekkel, és ez az automatikus viselkedés több problémát okozhat, mint amennyit megold. Ha a vonalvégződéseken alapuló problémákat tapasztal, javasoljuk, hogy konfigurálja a Gitet, hogy mindenhol az LF-t válassza. Ehhez adjon hozzá egy .gitattributes fájlt az adattár gyökeréhez. Ebben a fájlban adja hozzá a következő sort:

* text eol=lf

Olyan változók, amelyekhez hozzá van fűzve a " (egyetlen idézőjel)

Ha a folyamat tartalmaz egy Bash-szkriptet, amely a parancs használatával állítja be a ##vso változókat, előfordulhat, hogy egy további ' hozzáfűzés jelenik meg a beállított változó értékéhez. Ennek oka az interakció a következővel: set -x. A megoldás a set -x átmeneti letiltása egy változó beállítása előtt. Az ehhez használandó Bash-szintaxis: set +x.

set +x
echo ##vso[task.setvariable variable=MY_VAR]my_value
set -x

Miért történik ez?

Számos Bash-szkript tartalmazza a set -x hibakeresést segítő parancsot. A Bash pontosan nyomon fogja követni, hogy milyen parancsot hajtottak végre, és vissza fogja visszhangozni az stdout-ra. Ez azt eredményezi, hogy az ügynök kétszer látja a ##vso parancsot, másodszor pedig a Bash hozzáadja a ' karaktert a végéhez.

Vegyük például ezt a folyamatot:

steps:
- bash: |
    set -x
    echo ##vso[task.setvariable variable=MY_VAR]my_value

Az stdouton az ügynök két sort fog látni:

##vso[task.setvariable variable=MY_VAR]my_value
+ echo '##vso[task.setvariable variable=MY_VAR]my_value'

Amikor az ügynök az első sort látja, MY_VAR a megfelelő értékre lesz állítva: "my_value". Ha azonban a második sort látja, az ügynök mindent feldolgoz a sor végéig. MY_VAR értéke "my_value".

A szkript végrehajtásakor a kódtárak nincsenek telepítve a Python-alkalmazáshoz

Egy Python-alkalmazás üzembe helyezésekor bizonyos esetekben egy CI/CD-folyamat fut, és a kód sikeresen üzembe van helyezve, de az összes függőségi kódtár telepítéséért felelős requirements.txt fájl nem fut.

A függőségek telepítéséhez használjon üzembe helyezés utáni szkriptet az App Service üzembe helyezési feladatában. Az alábbi példa azt a parancsot mutatja be, amelyet az üzembe helyezés utáni szkriptben kell használnia. A forgatókönyv szkriptje frissíthető.

D:\home\python364x64\python.exe -m pip install -r requirements.txt

A szolgáltatáskapcsolatokkal kapcsolatos problémák elhárításához tekintse meg a szolgáltatáskapcsolatok hibaelhárítását.

A folyamat leállította az ügynök meghallgatását

Ha a folyamat egy ilyen We stopped hearing from agent <agent name>. Verify the agent machine is running and has a healthy network connection.üzenettel meghiúsul, ellenőrizze az ügynök erőforrás-kihasználtságát, hogy az ügynök gépe elfogy-e az erőforrásokból. A Sprint 228-tól kezdve az Azure Pipelines-naplók minden lépéshez tartalmaznak erőforrás-kihasználtsági metrikákat.

Az Azure DevOps Services használatakor részletes naplók engedélyezésével láthatja a naplók erőforrás-kihasználtságát, beleértve a lemezhasználatot, a memóriahasználatot és a PROCESSZORhasználatot. Amikor a folyamat befejeződött, keresse meg a naplókbanAgent environment resources az egyes lépések bejegyzéseit.

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%

További erőforrás-kihasználtsági naplók rögzítéséről további információt az erőforrás-kihasználtság rögzítése című témakörben talál.

A Storage Explorer engedélyezése statikus tartalmak, például .css és .js statikus webhelyre való üzembe helyezéséhez az Azure DevOpsból az Azure Pipelineson keresztül

Ebben a forgatókönyvben az Azure File Copy feladat használatával tölthet fel tartalmat a webhelyre. A Tartalom feltöltése szakaszban leírt eszközök bármelyikével feltölthet tartalmakat a webtárolóba.

Következő lépések