Munkafolyamatok kezelése és hibakeresése a GitHub Actionsben

Befejezett

Ne feledje, hogy a cél a kód összeállítási és közzétételi folyamatának automatizálása, hogy a funkciók minden alkalommal frissüljenek, amikor egy fejlesztő módosítja a kódbázist.

Ennek a folyamatnak a végrehajtásához elsajátíthatja a következő lépéseket:

  • Azonosítsa a munkafolyamatot kiváltó eseményt.
  • Használja a GitHub Actions munkafolyamat-naplóit.
  • Build-artifaktumok mentése és elérése.
  • A véleményezést követően automatizálhatja a címke hozzáadását egy lekéréses kérelemhez.

A munkafolyamatot kiváltó esemény azonosítása

A GitHub Actions-munkafolyamatok működésének megértése kulcsfontosságú a CI/CD-folyamatok hibakereséséhez, naplózásához és fejlesztéséhez. Az eseményindítók típusa lehet például egy leküldés egy ágba, egy létrehozott vagy frissített lekéréses kérelem, egy ütemezett feladat vagy egy manuális küldés. Az eseményindító esemény azonosításához vizsgálja meg a munkafolyamat futtatását, az adattár módosításait, valamint a kapcsolódó GitHub-problémát vagy lekéréses kérelmet.

A GitHub Actions különböző munkafolyamat-eseményindítóit, például leküldéses, lekéréses kérelmeket, ütemezést és manuális küldést bemutató diagram.

Mi az a munkafolyamat-eseményindító?

A munkafolyamat-eseményindító olyan esemény, amely egy munkafolyamat futtatását okozza. A GitHub különböző típusú eseményindítókat támogat, például:

  • push vagy pull_request (kódmódosítások alapján)
  • workflow_dispatch (manuális eseményindító)
  • schedule (cron-feladatok)
  • repository_dispatch (külső rendszerek)
  • Hibák, viták és pull request események (például issues.opened, pull_request.closed)

Az eseményindító esemény azonosítása

A munkafolyamat-eseményindítók eseményét többféleképpen is azonosíthatja:

  • Használja a GitHub Actions felhasználói felületét:

    1. Az adattárban válassza a Műveletek lapot.
    2. Válasszon ki egy munkafolyamat-futtatási lehetőséget.

    A munkafolyamat-futtatási összegzés tetején megjelenik egy eseménytípus, például pushpull_request, vagy workflow_dispatch.

  • Használja github.event_name a naplókban vagy munkafolyamatokban.

    • A GitHub környezeti adatokat tesz elérhetővé egy munkafolyamat futtatása során. A github.event_name változó azt jelzi, hogy melyik esemény váltotta ki a munkafolyamatot.

    • A hibakereséshez egy lépésben kinyomtathatja az információkat:

      -name: Show event trigger
        run: echo "Triggered by ${{ github.event_name }}"
      
  • A munkafolyamat futtatási részleteinek használata:

    • Ha programozott módon( például API használatával) vizsgálja meg a munkafolyamat-futtatásokat, a futtatási objektum tartalmaz egy event tulajdonságot, amely meghatározza az eseményindítót.
    • Megtalálhatja a véglegesítési biztonságos kivonatoló algoritmust (SHA), az aktort és az időbélyeget az eseményindító okának nyomon követéséhez.

Az eseményindító következtetése az adattár effektusaiból

Előfordulhat, hogy nem rendelkezik közvetlen hozzáféréssel a munkafolyamat-futtatáshoz, de továbbra is azt szeretné kikövetkeztetni, hogy mi váltotta ki a munkafolyamat futtatását az adattártevékenység alapján:

Megfigyelt viselkedés Eseményindító
A rendszer leküldött egy új véglegesítést, main és a munkafolyamat lefutott. push esemény
A rendszer megnyitott vagy frissített egy lekéréses kérelmet. pull_request esemény
Egy közreműködő manuálisan futtatott egy munkafolyamatot. workflow_dispatch
A munkafolyamat naponta, adott időpontban fut. schedule (cron)
A munkafolyamat egy külső szolgáltatáshívás után futott. repository_dispatch
A munkafolyamat akkor futott le, amikor címkét vagy megjegyzést adtak hozzá egy problémához. issues.* esemény

A timestampok, a pull requestek aktivitásának és a commit történetének áttekintésével gyakran megállapíthatja, hogy melyik művelet indította el a munkafolyamatot.

A munkafolyamatot kiváltó folyamat azonosításának összegzése:

  • Ellenőrizze a munkafolyamat-futtatás összegzését a Műveletek lapon.
  • Nyomtassa ki vagy jelentkezzen be github.event_name a munkafolyamatba a láthatóság érdekében.
  • Hasonlítsa össze az időbélyegeket és az adattár aktivitását (commit-eket, lekéréses kérelmeket, problémákat), hogy következtetést vonjon le az indító okról.
  • A részletesebb vizsgálathoz használja a teljes event kontextust.

Ezek a gyakorlatok segítenek a munkafolyamatok megbízhatóságának hibakeresésében, naplózásában és javításában a fejlesztési és üzembehelyezési folyamatokban.

Munkafolyamat-effektus megismerése a konfigurációs fájl olvasásával

A munkafolyamat konfigurációs fájljának olvasásából származó hatásainak megértéséhez elemezze a fájl .ymlstruktúráját és tartalmát..github/workflows/

A munkafolyamat konfigurációs fájlja a következő információkat adja meg a munkafolyamatról:

  • Amikor fut (a on szakaszban).
  • Mit csinál (jobs és steps).
  • Hol fut (a runs-on szakasz).
  • Miért fut (a célja, például tesztelés, üzembe helyezés vagy linting).
  • Hogyan viselkedik adott körülmények között (környezet, szűrők, logika).

Munkafolyamat-effektus értelmezése

  1. Azonosítsa az eseményindítót.

    A munkafolyamatot kezdeményező művelet azonosításához tekintse meg a on munkafolyamat szakaszát.

    Például:

    on:
      push:
        branches: [main]
      pull_request:
        types: [opened, synchronize]
      workflow_dispatch:
    

    Ez a példa munkafolyamat:

    • A kód fő ágba (push) való leküldésekor automatikusan lefut.
    • Lekéréses kérelem létrehozásakor vagy frissítésekor (pull_request) fut.
    • A felhasználó (workflow_dispatch) manuálisan aktiválhatja.
  2. Azonosítsa a munkafolyamat-feladatokat és lépéseket.

    A munkafolyamat feladatának meghatározásához tekintse meg a jobs munkafolyamat szakaszait és steps szakaszait.

    Például:

    jobs:
      test:
        runs-on: ubuntu-latest
        steps:
          - name: Checkout code
            uses: actions/checkout@v3
          - name: Install dependencies
            run: npm install
          - name: Run tests
            run: npm test
    

    Ez a példa munkafolyamat:

    • Linux rendszerű virtuális környezetet (runs-on) használ.
    • Ellenőrzi az adattár kódját (steps>name).
    • Telepíti a projektfüggőségeket (steps>name).
    • Automatizált teszteket futtat (steps>name).
  3. Értékelje ki a munkafolyamat célját és eredményét.

    A konfigurációs fájl elolvasásával leírhatja a munkafolyamat kívánt eredményét:

    "Ez a munkafolyamat egy folyamatos integrációs (CI) folyamat. Biztosítja, hogy a rendszer automatikusan tesztelje az adattárba leküldött vagy lekéréses kérelemmel elküldött új kódot. Ha a tesztek sikertelenek, a GitHub munkafolyamat felhasználói felülete megjeleníti ezt az eredményt a kódminőség fenntartása érdekében."

  4. A munkafolyamat működését befolyásoló választható funkciók azonosítása vagy beállítása:

    • env környezeti változókat állít be.
    • if Feltételes logikát ad hozzá, hogy csak feltételek teljesülése esetén futtasson bizonyos lépéseket.
    • timeout-minutes vagy continue-on-error állítsa be a munkafolyamat-végrehajtást és a hibakezelést.

Sikertelen munkafolyamat-futtatás diagnosztizálása

  1. Az adattárban lépjen a Műveletek lapra .

  2. Keresse meg a sikertelen futtatást, amelyet általában egy piros X jelöl.

  3. Válassza ki a sikertelen munkafolyamatot a futtatási összegzés megnyitásához.

  4. A munkafolyamat-naplókban tekintse át a hibát.

    1. A futtatási összegzésben bontsa ki az egyes feladatokat és lépéseket, amíg meg nem találja a hibát jelzőt.

    2. Válassza ki a feladatot vagy a lépést a naplóinak megtekintéséhez.

    3. Keresse a következőt:

      • Hibaüzenetek
      • Veremnyomok
      • Kilépési kódok

    Előfordulhat például, hogy egy sikertelen teszt jelenik meg npm ERR! Test failed vagy exit code 1.

  5. Ellenőrizze a munkafolyamat konfigurációs fájlját.

    Használja a .yml fájlt annak meghatározására:

    • Minden egyes lépés mit próbált elérni?
    • Ha vannak olyan környezeti változók (env) vagy feltételes (if), amelyek befolyásolják a végrehajtást.
    • Ha a hiba oka egy hiányzó függőség, szintaktikai hiba vagy helytelenül konfigurált lépés.

    Ha egy lépés meghiúsul, ellenőrizze a következő okokat:

    • Sikeresen telepítettek függőségeket az előző lépésben?
    • Léteznek tesztfájlok, és helyileg sikeresen futnak?

Gyakori hibaforgatókönyvek

Az alábbi táblázat a munkafolyamatok gyakori meghibásodási forgatókönyveit ismerteti:

Tünet Valószínű ok
Egy lépés sikertelen, és visszaadja az command not foundl értéket Hiányzó függőség vagy helytelen beállítás
npm install Megbukik. Sérült package-lock.json fájl vagy hálózati probléma
A tesztelési lépés meghiúsul Egységtesztelési problémák, hiányzó konfigurációs fájl vagy érvénytelen tesztszintaxis
Permission denied Jelenik meg. Helytelen fájlengedélyek vagy hiányzó titkos kódok

Munkafolyamat-naplók elérése a GitHubon

  1. Az adattárban lépjen a Műveletek lapra .

  2. A munkafolyamatok listájában válassza ki a megfelelő munkafolyamatot.

    Ha például a .yml fájl a következő kóddal rendelkezik, megjelenik egy CI-munkafolyamat nevű hivatkozás a listában:

    name: CI Workflow
    
  3. Válasszon ki egy adott futtatási lehetőséget.

    Az állapotot megjelenítő futtatások listájában válassza ki az ellenőrizni kívánt futtatás időbélyegét vagy véglegesítési üzenetét.

  4. Bontsa ki az egyes feladatokat és lépéseket.

    A futtatási összefoglaló lapon a munkafolyamat-fájlban meghatározott feladatok jelennek meg, például építés vagy tesztelés.

    1. Jelöljön ki egy feladatot a kibontásához.
    2. A feladaton belül bontsa ki az egyes lépéseket, például a "Függőségek telepítése" vagy a "Tesztek futtatása" elemet.
  5. Naplókimenet megtekintése.

    A teljes naplókimenet megtekintéséhez, beleértve a konzolnaplókat, a hibaüzeneteket és a hibakeresési információkat, válasszon egy munkafolyamat-lépést. A naplókat másolhatja, keresheti és letöltheti.

Az alábbi táblázat összefoglalja a munkafolyamat-naplók elérésének lépéseit:

Tevékenység Cél
Műveletek lap Az összes munkafolyamat-futtatás megtekintése.
Válassza ki a munkafolyamat nevét A szűrés munkafolyamatok szerint fut.
Válasszon egy futtatást Adott feladat és lépés eredményeinek megtekintése.
Lépések kibontása Részletes naplók megtekintése.
Naplók letöltése Töltse le a naplókat offline vagy csapatszintű hibaelhárításhoz.

A build műveleti naplói

Amikor egy munkafolyamat fut, létrehoz egy naplót, amely tartalmazza a történtek részleteit, valamint az esetleges hibákat vagy tesztelési hibákat.

Ha hiba történik, vagy ha egy teszt sikertelen, a naplókban zöld pipa helyett piros X jelenik meg. Megvizsgálhatja a hibát vagy a kudarc részleteit, hogy kiderítse, mi történt.

Képernyőkép a GitHub Actions-naplóról egy sikertelen teszt részleteivel.

Műtárgyak kezelése

Ha egy munkafolyamat nem naplóbejegyzést hoz létre, a terméket összetevőnek nevezzük. A Node.js build például üzembe helyezhető Docker-tárolót hoz létre. A konténer egy artifaktum, amelyet a műveletek/upload-artifact művelet használatával feltölthet a tárhelyre. A műveletek/download-artifact használatával később letöltheti az artefaktumot a tárhelyről.

A megőrzött artefaktum segít a feladatok között. Minden feladat egy virtuális gép friss példányát használja, így nem használhatja újra az összetevőt a virtuális gépre való mentéssel. Ha az összetevőre egy másik feladatban van szüksége, feltöltheti az összetevőt a tárolóba az egyik feladatban, és letöltheti a másik feladathoz.

Műtárgy-tároló

Az összetevők a GitHub tárhelyén vannak tárolva. A nyilvános adattárak számára a tárhely ingyenes, a fióktól függően pedig a privát tárházak számára is ingyenes. A GitHub 90 napig tárolja az összetevőket.

A következő munkafolyamat-kódrészletben figyelje meg, hogy a actions/upload-artifact@main műveletben van egy path attribútum. Ennek az attribútumnak az értéke az artefaktum tárolásának elérési útja. Ebben a példában a public/ könyvtárba ad meg mindent feltöltésre. Ha csak egyetlen fájlt szeretne feltölteni, használjon nyilvános vagymytext.txt.

  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: npm install and build webpack
        run: |
          npm install
          npm run build
      - uses: actions/upload-artifact@main
        with:
          name: webpack artifacts
          path: public/

Az összetevő teszteléshez való letöltéséhez a buildnek sikeresen le kell fejeződnie, és fel kell töltenie az összetevőt. Az alábbi kódban adja meg, hogy a tesztfeladat a buildelési feladattól függ.

test:
    needs: build
    runs-on: ubuntu-latest

A következő munkafolyamat-kódrészletben letölti az összetevőt. A tesztfeladat most már használhatja az összetevőt tesztelésre.

steps:
    - uses: actions/checkout@v3
    - uses: actions/download-artifact@main
      with:
        name: webpack artifacts
        path: public

Az összetevők munkafolyamatokban való használatával kapcsolatos további információkért tekintse meg a munkafolyamat-adatok összetevőként való tárolását ismertető témakört.

Felülvizsgálatok automatizálása a GitHubon munkafolyamatok használatával

Amellett, hogy elindít egy munkafolyamatot a GitHub-eseményeken keresztül, például push és pull-request, egy munkafolyamatot ütemezés szerint vagy egy GitHubon kívüli esemény után is futtathat.

Előfordulhat, hogy azt szeretné, hogy egy munkafolyamat csak akkor fusson, ha egy felhasználó végrehajt egy adott műveletet, például miután egy felülvizsgáló jóváhagy egy lekéréses kérelmet. Ebben a forgatókönyvben aktiválhatja a következőt pull-request-review: .

Egy másik művelet, amelyet elvégezhet, ha címkét ad hozzá a lekéréses kérelemhez. Ebben az esetben használja a pullreminders/label-when-approved-action műveletet.

Például:

    steps:
     - name: Label when approved
       uses: pullreminders/label-when-approved-action@main
       env:
         APPROVALS: "1"
         GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
         ADD_LABEL: "approved"

A blokkban env beállítja a művelet környezeti változóit. Beállíthatja például a munkafolyamat futtatásához szükséges jóváhagyók számát. Ebben a példában ez az egyik. A secrets.GITHUB_TOKEN hitelesítési változóra azért van szükség, mert a műveletnek címkével kell módosítania az adattárat. Végül adja meg a hozzáadni kívánt címke nevét.

A címke hozzáadása olyan esemény lehet, amely egy másik munkafolyamatot, például egyesítést indít el. Ezt az eseményt a következő modulban ismertetjük, amely a GitHub Actions folyamatos kézbesítését ismerteti.